我有一个Listview和一个适配器到这个Listview。还有一个与该适配器绑定(?)的ArrayList。
我正在为此Arraylist添加一个项目。 我调用notifyDataSetChanged()方法。
我直接打电话给
listview.getChildAt(myadapter.getCount()-1)
现在我得到一个NullpointerException。 在调试器中,我还看到Listview的mChildren填充了null。 为什么会这样?需要更多时间吗?
铜 JackZ
答案 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);
你会看到它是如何运作的