我有一个带有arrayadapter的listview。我想在完全填写我的项目数组时刷新适配器,并且仅在此时。我知道notifyDataSetChanged()将在add,addAll,remove,insert或clear等方法之后自动调用,但我认为我的情况可能存在错误。 这是一段应该有效的简单代码片段。我的意思是在这种情况下,适配器不应该通知其ListView,并且不能显示内容(但内容显示在我的设备上)。
ArrayList<MenuFragmentItem> menu = buildMenu();
MenuAdapter mAdapter = new MenuAdapter(getActivity().getApplicationContext(), 0, MenuFragment.this);
mListView.setAdapter(mAdapter);
mAdapter.setNotifyOnChange(false);
mAdapter.clear();
mAdapter.addAll(menu);
// mAdapter.notifyDataSetChanged(); SAME RESULT IF I REMOVE THIS LINE, CONTENT IS DISPLAYED
关于这个问题的任何想法?
答案 0 :(得分:0)
如果查看ListView
源代码,您会看到setAdapter
设置mDataChanged
并调用requestLayout
,这将调度布局。在发生此布局之前,您的适配器将不会被回读,这将在执行clear
和addAll
代码之后进行回读。
还有其他几种方法可以将mDataChanged
设置为true并进行新的requestLayout
调用,例如检查,聚焦或选择项目。调用notifyDataSetChanged
只会立即发生这种情况:
public void onChanged() {
mDataChanged = true;
...
requestLayout();
}