Android ListActivity onListItemClick,ListView没有子项

Android ListActivity onListItemClick,ListView没有子项,android,listview,Android,Listview,我在ListActivity中遇到问题 onListItemClick方法需要访问ListView的子视图,以便在选择错误答案时突出显示正确答案。这种逻辑通常运作良好。但问题是,如果我走得太快,即在显示列表时不分青红皂白地敲打屏幕,很快ListView将在onListItemClick中返回0个子项,程序将在生成的空视图上崩溃。我的调试语句表明,发生这种情况时,用于填充ListView的数组已正确初始化,如预期的那样包含所有四项 附加信息:当用户响应时,我正在将数据写入AsyncTask中的DB

我在ListActivity中遇到问题

onListItemClick方法需要访问ListView的子视图,以便在选择错误答案时突出显示正确答案。这种逻辑通常运作良好。但问题是,如果我走得太快,即在显示列表时不分青红皂白地敲打屏幕,很快ListView将在onListItemClick中返回0个子项,程序将在生成的空视图上崩溃。我的调试语句表明,发生这种情况时,用于填充ListView的数组已正确初始化,如预期的那样包含所有四项

附加信息:当用户响应时,我正在将数据写入AsyncTask中的DB。当我禁用此功能时,问题似乎消失了。我正在将ApplicationContext的一个子类传递给它,但没有其他线程共有的数据

这是用于填充ListView的数组:

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...