Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onCreateLoader()只调用了一次_Android_Android Fragments_Android Asynctask - Fatal编程技术网

Android onCreateLoader()只调用了一次

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

我有一个扩展ListFragment并实现LoaderManager.LoaderCallbacks的片段。在这个片段中,我有一个按钮,它应该调用Web服务并填充列表

问题是这个方法只被调用一次,只有在创建片段时才被调用,并且每次我按下按钮时都会被调用:

@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);
            } 
        }
    });
   ....