ListActivityに問題があります。ListActivity onListItemClick、ListViewに子がありません
不適切なものが選択された場合、正しい答えを強調表示するために、onListItemClickメソッドはListViewの子ビューにアクセスする必要があります。このロジックは通常正しく動作します。しかし、問題は、リストが提示されている間、表示が速くなりすぎると、ListViewがonListItemClickに0人の子供を返し、プログラムが結果として空のビューでクラッシュするということです。私のデバッグステートメントは、これが発生した場合、ListViewを生成するために使用される配列が正しく初期化され、4つのアイテムがすべて期待どおりに格納されていることを示しています。
追加情報:ユーザーが応答すると、AsyncTaskの内部でDBにデータを書き込みます。これを無効にすると、問題は消え去っているようです。私はそれにApplicationContextのサブクラスを渡していますが、他のデータはスレッドに共通していません。
これは、リストビューをポピュレートするために使用される配列である:すなわち、配列リストがコードに移入され、以下のように宣言され
ArrayList<String> myArrayList = new ArrayList<String>();
:
String[] myAnswerArray = new String[4];
リストビュー・アダプタは、以下に設定されていますコード抽出:
myArrayList.clear();
myArrayList.addAll(Arrays.asList(myAnswerArray));
// attach the adapter to the ListView
setListAdapter(myStringArrayAdapter);
MyStringArrayAdapterはArrayAdapterを拡張して表示します。ここでは完全性のために:
public class MyStringArrayAdapter extends ArrayAdapter<String> {
private Typeface font;
private static final String TAG = "MyStringArrayAdapter";
public MyStringArrayAdapter(Context context, int textViewResourceId,
ArrayList<String> answerArray, Typeface font) {
super(context, textViewResourceId, answerArray);
this.font = font;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
View v = super.getView(position, view, viewGroup);
((TextView) v).setTypeface(font);
return v;
}
}
問題が表示されたら、ゼロの子をチェックするコードを追加しました。ここで私はそれをチェック方法は次のとおりです。
再び@Override
protected void onListItemClick(ListView listView, View listItemView,
int position, long id) {
super.onListItemClick(listView, listItemView, position, id);
int childCount = listView.getChildCount();
// Workaround on bug raised by monkey exerciser
if (childCount == 0) {
Log.d(TAG, "No children found in ListView")
}
// etc...
、私はタッチスクリーン上で急速に離れて強打場合、この問題が発生し、また、運動者猿は時折ありますが、いつも私はそれを待ってみました、これを生成しませんループ内でThread.sleepを使用して子カウントを再取得しても差はありません。
これを解決する方法はありますか?