0

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

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

我直接在那之后我打电话

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

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

铜杰克Z

4

1 回答 1

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);

你会看到它是如何工作的

于 2013-06-10T15:47:35.487 回答