【发布时间】:2011-10-19 02:10:41
【问题描述】:
我遇到了 ListActivity 的问题。
onListItemClick 方法需要访问 ListView 的子视图,以便在选择不正确的答案时突出显示正确答案。这种逻辑通常可以正常工作。但问题是,如果我走得太快,即只是在显示列表时不加选择地在显示器上敲打,不久之后 ListView 将在 onListItemClick 中返回 0 个子项,并且程序将在生成的空视图上崩溃。我的调试语句显示,当发生这种情况时,用于填充 ListView 的数组已正确初始化,包含预期的所有四个项目。
附加信息:当用户响应时,我正在将数据写入 AsyncTask 内的数据库。当我禁用它时,问题似乎消失了。我将 ApplicationContext 的子类传递给它,但线程没有其他数据是通用的。
这是用于填充 ListView 的数组:
ArrayList<String> myArrayList = new ArrayList<String>();
该数组列表填充在代码中,并声明如下:
String[] myAnswerArray = new String[4];
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;
}
}
一旦问题开始出现,我就添加了代码来检查零个孩子。这是我检查的方法:
@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 和重新检索子计数,但这没有区别。
有人知道如何解决这个问题吗?
【问题讨论】: