将孩子添加到列表视图需要多长时间?

时间:2013-06-10 15:22:25

标签: android listview

我有一个Listview和一个适配器到这个Listview。还有一个与该适配器绑定(?)的ArrayList。

我正在为此Arraylist添加一个项目。 我调用notifyDataSetChanged()方法。

我直接打电话给

listview.getChildAt(myadapter.getCount()-1)

现在我得到一个NullpointerException。 在调试器中,我还看到Listview的mChildren填充了null。 为什么会这样?需要更多时间吗?

铜 JackZ

1 个答案:

答案 0 :(得分:1)

这是因为你的listview适配器可以有数千个项目,但listview不超过十到二十个直接子项。

尝试将此添加到您的Activity.onCreate

final ArrayAdapter<String> a = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
a.add("0");
a.add("1");
final ListView lv = new ListView(this);
lv.setAdapter(a);
OnItemClickListener listener = new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Log.d(TAG, "onItemClick cnt " + lv.getChildCount());
        Log.d(TAG, "onItemClick first " + lv.getFirstVisiblePosition());
        Log.d(TAG, "onItemClick last " + lv.getLastVisiblePosition());
        a.add(Integer.toString(a.getCount()));
        lv.post(new Runnable() {
            @Override
            public void run() {
                Log.d(TAG, "run cnt " + lv.getChildCount());
                Log.d(TAG, "run first " + lv.getFirstVisiblePosition());
                Log.d(TAG, "run last " + lv.getLastVisiblePosition());
            }
        });
    }
};
lv.setOnItemClickListener(listener);
setContentView(lv);

你会看到它是如何运作的