Android 2.1でlistViewクラッシュに分離listAdapterを使用しますが、2.2で動作します
-
16-10-2019 - |
質問
私は書かれているようにsepratedlistadapterを使用しています ジェフ・シャーキー 。私はもともと、Nexus Oneでこのアプリケーションの開発を開始しました。そこでは、意図したとおりに機能するようになりました。今、私は特定の部品をテストしていますが、Android 2.1を実行している他のすべての携帯電話でアプリケーションがクラッシュしています。私のプロジェクトビルド目標は、これらすべての電話と同じ2.1-update1です。
エラーのログキャットは次のとおりです
01-21 18:24:01.486: ERROR/AndroidRuntime(4615): Uncaught handler: thread main exiting due to uncaught exception
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): java.lang.NullPointerException
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.widget.SimpleAdapter.bindView(SimpleAdapter.java:171)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.widget.SimpleAdapter.createViewFromResource(SimpleAdapter.java:138)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.widget.SimpleAdapter.getView(SimpleAdapter.java:116)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at com.hitpost.GamesList$SeparatedListAdapter.getView(GamesList.java:347)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.widget.AbsListView.obtainView(AbsListView.java:1274)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.widget.ListView.makeAndAddView(ListView.java:1668)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.widget.ListView.fillDown(ListView.java:637)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.widget.ListView.fillSpecific(ListView.java:1224)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.widget.ListView.layoutChildren(ListView.java:1511)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.widget.AbsListView.onLayout(AbsListView.java:1113)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.view.View.layout(View.java:6830)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:900)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.view.View.layout(View.java:6830)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.view.View.layout(View.java:6830)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.view.View.layout(View.java:6830)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.view.ViewRoot.performTraversals(ViewRoot.java:996)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.os.Handler.dispatchMessage(Handler.java:99)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.os.Looper.loop(Looper.java:123)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at android.app.ActivityThread.main(ActivityThread.java:4363)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at java.lang.reflect.Method.invokeNative(Native Method)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at java.lang.reflect.Method.invoke(Method.java:521)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): at dalvik.system.NativeStart.main(Native Method)
ログキャットによって参照される私のコードの関連部分
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int sectionnum = 0;
for(Object section : this.sections.keySet()) {
Adapter adapter = sections.get(section);
int size = adapter.getCount() + 1;
// check if position inside this section
if(position == 0)
return headers.getView(sectionnum, convertView, parent);
if(position < size) {
//View row = convertView;
ScoreViewHolder viewHolder;
HashMap<String,Object> map = (HashMap<String,Object>) adapter.getItem(position - 1);
if (convertView == null) {
convertView = inflater.inflate(R.layout.league_list_item, null);
viewHolder = new ScoreViewHolder();
viewHolder.row = (RelativeLayout) convertView.findViewById(R.id.ListItem);
viewHolder.checkinImage = (ImageView) viewHolder.row.findViewById(R.id.CheckinLeagueImage);
viewHolder.score1 = (TextView) viewHolder.row.findViewById(R.id.Team1Score);
viewHolder.score2 = (TextView) viewHolder.row.findViewById(R.id.Team2Score);
convertView.setTag(viewHolder);
} else {
viewHolder = (ScoreViewHolder) convertView.getTag();
}
if ((Integer) map.get("position") % 2 == 1)
viewHolder.row.setBackgroundColor(Color.DKGRAY);
else
viewHolder.row.setBackgroundColor(Color.GRAY);
if (map.get("gamestatus").equals("Final")) {
viewHolder.gameFinal();
} else if (map.get("gamestatus").equals("In-Progress")) {
viewHolder.gameInProgress();
} else if (map.get("gamestatus").equals("Pre-Game")) {
viewHolder.gameFinal();
}
viewHolder.row.setOnClickListener(new GameItemListener((String)map.get("id"),
map.get("team2Name") + " " +
map.get("team2Score") + " @ " +
map.get("team1Name") + " " +
map.get("team1Score")
));
return adapter.getView(position - 1, convertView, parent);
}
// otherwise jump into next section
position -= size;
sectionnum++;
}
return null;
}
「return adapter.getView(Position -1、ConvertView、parent)」でエラーが発生すると、」
Stackoverflowにかなりの金額を費やしたので、何が起こっているのかを理解するのは非常に難しいことを知っています。ここにまとめがあります。 ListViewには、スポーツのスコアのリストが表示されるため、各アイテムは2つのチーム名、2つのスコア、アイコンで構成されています。
どんなヒントにも感謝します。 Simpleadapterのコードを見て、エラーの原因となっているものを把握することはできませんが、理解できません。ありがとう。
解決
私はこれを理解しました、そして、おそらく仲間のAndroid開発者を助けるために応答しています。
問題は、根底にあるアダプターが世話をしているはずのことを行うために、私が隔てられたListAdapter getViewを作成しようとしていたことです。私は自分のアダプターをSimpleAdapterを拡張するセクションアダプターと呼び、必要に応じてビュー要素を操作します。このようなセクションを追加するとき
adapter.addSection(currentGameDate, new SectionAdapter(mContext, mActivity, currentGameDateSubset, R.layout.league_list_item, keyNames, keyIds));
それが役立つことを願っています。