Android onCreateLoader()只调用了一次
我有一个扩展ListFragment并实现LoaderManager.LoaderCallbacks的片段。在这个片段中,我有一个按钮,它应该调用Web服务并填充列表 问题是这个方法只被调用一次,只有在创建片段时才被调用,并且每次我按下按钮时都会被调用:Android onCreateLoader()只调用了一次,android,android-fragments,android-asynctask,Android,Android Fragments,Android Asynctask,我有一个扩展ListFragment并实现LoaderManager.LoaderCallbacks的片段。在这个片段中,我有一个按钮,它应该调用Web服务并填充列表 问题是这个方法只被调用一次,只有在创建片段时才被调用,并且每次我按下按钮时都会被调用: @Override public Loader<List<ResultSearchUser>> onCreateLoader(int arg0, Bundle arg1) { return new SearchU
@Override
public Loader<List<ResultSearchUser>> onCreateLoader(int arg0, Bundle arg1) {
return new SearchUsersTask(getActivity(), page, size);
}
为什么只有在创建片段时才调用onCreatedLoader()?为什么每次我按下按钮时都会调用onLoadFinished()方法?使用onLoadFinished()方法调用我的任务并填写列表的正确方法是什么
提前感谢。来自:
确保加载程序已初始化并处于活动状态。如果加载程序不存在,则会创建一个加载程序,并(如果活动/片段当前已启动)启动加载程序。否则,将重新使用上次创建的加载程序
换句话说,initLoader()
只会在尚未创建Loader
时触发对onCreateLoader()的调用。在随后的调用中,加载程序
将被重用
如果需要强制销毁/创建现有的加载程序
,则应调用加载程序管理器#restartLoader()
。明白了。那么什么是最佳实践呢?切换我的按钮以调用我的任务并使用回调来填充ListFragment?将“getLoaderManager().restartLoader(0,null,SearchFragment.this);”放在按钮上。setOnClickListener()听起来像是一个(糟糕的)解决方法。如果您只想重新执行加载程序的加载任务,那么您可以调用加载程序#forceLoad()
。
@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);
}
}
});
....