Android ListActivity onListItemClick,ListView没有子项
我在ListActivity中遇到问题 onListItemClick方法需要访问ListView的子视图,以便在选择错误答案时突出显示正确答案。这种逻辑通常运作良好。但问题是,如果我走得太快,即在显示列表时不分青红皂白地敲打屏幕,很快ListView将在onListItemClick中返回0个子项,程序将在生成的空视图上崩溃。我的调试语句表明,发生这种情况时,用于填充ListView的数组已正确初始化,如预期的那样包含所有四项 附加信息:当用户响应时,我正在将数据写入AsyncTask中的DB。当我禁用此功能时,问题似乎消失了。我正在将ApplicationContext的一个子类传递给它,但没有其他线程共有的数据 这是用于填充ListView的数组:Android ListActivity onListItemClick,ListView没有子项,android,listview,Android,Listview,我在ListActivity中遇到问题 onListItemClick方法需要访问ListView的子视图,以便在选择错误答案时突出显示正确答案。这种逻辑通常运作良好。但问题是,如果我走得太快,即在显示列表时不分青红皂白地敲打屏幕,很快ListView将在onListItemClick中返回0个子项,程序将在生成的空视图上崩溃。我的调试语句表明,发生这种情况时,用于填充ListView的数组已正确初始化,如预期的那样包含所有四项 附加信息:当用户响应时,我正在将数据写入AsyncTask中的DB
ArrayList<String> myArrayList = new ArrayList<String>();
ListView适配器在以下代码提取中设置:
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;
}
}
同样,这个问题只会在我快速敲击触摸屏时发生,而且锻炼者猴子偶尔也会生成这个,但并不总是生成。我尝试过等待它被填充,使用Thread.sleep in a loop并重新检索子计数,但这没有什么区别
有人知道如何解决这个问题吗 尝试使用ViewHolder
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...