我刚注意到我看到的每个示例都使用ListFragment
并调用
adapter = new Adapter(context);
setListAdapter(adapter);
getLoaderManager().initLoader(0, null, this);
完全按照那个顺序。
当我使用Fragment
时,执行此操作
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
adapter = new Adapter(mContext);
getLoaderManager().initLoader(0, null, this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
listView = (ListView) view.findViewById(R.id.listview);
listView.setAdapter(adapter);
return view;
}
它没有用。我在onLoadFinished(Loader<Cursor> loader, Cursor cursor)
内跟踪,发现adapter
并不知道ListView
,因此swapCursor(newCursor)
没有效果。
但是当我这样做时,它会起作用。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
listView = (ListView) view.findViewById(R.id.listview);
adapter = new Adapter(mContext);
listView.setAdapter(adapter);
getLoaderManager().initLoader(0, null, this);
return view;
}
我觉得我知道这个问题,但我需要一个解释来确认。感谢。
答案 0 :(得分:2)
adapter.swapCursor()
无效,因为在初始化适配器后,您从未将适配器设置为ListView。
onCreateView()
之前调用 onActivityCreated()
。当您将适配器设置为onCreateView()
内的ListView时,它可能为null。然后在onActivityCreated()
中初始化适配器,但与列表视图无关。