ListActivity onListItemClick,ListView没有子节点

时间:2011-08-03 12:44:52

标签: android listview

我遇到了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并且重新检索子计数,但没有区别。

任何人都有任何想法如何解决这个问题?