我有一个扩展ListFragment并实现LoaderManager.LoaderCallbacks的片段。在这个片段里面,我有一个按钮,应该调用web服务并填充List。
问题是这个方法只调用一次,只有在创建片段时,每次按下按钮都会调用它:
@Override
public Loader<List<ResultSearchUser>> onCreateLoader(int arg0, Bundle arg1) {
return new SearchUsersTask(getActivity(), page, size);
}
这是我的按钮:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
Button buttonSearchUsers = (Button) mLinearLayout
.findViewById(R.id.buttonSearchUsers);
buttonSearchUsers.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (user.getInterests() != null
&& user.getInterests().size() > 0) {
page++;
getLoaderManager().initLoader(0, null, SearchFragment.this);
}
}
});
....
为什么只在创建片段时调用onCreatedLoader()?为什么每次按下按钮时都会调用onLoadFinished()方法?使用onLoadFinished()方法调用我的Task并填充List的正确方法是什么?
提前感谢。
答案 0 :(得分:2)
确保加载程序已初始化并处于活动状态。如果加载器尚未存在,则创建一个加载器(如果活动/片段当前已启动),则启动加载器。否则,将重新使用上次创建的加载程序。
换句话说,initLoader()
只会在onCreateLoader()
尚未创建时触发Loader
。在后续调用中,Loader
将被重用。
如果您需要强制销毁/创建现有Loader
,则应拨打LoaderManager#restartLoader()
。