onCreateLoader()只调用一次

时间:2014-07-27 01:03:04

标签: android android-fragments android-asynctask

我有一个扩展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的正确方法是什么?

提前感谢。

1 个答案:

答案 0 :(得分:2)

来自documentation

  

确保加载程序已初始化并处于活动状态。如果加载器尚未存在,则创建一个加载器(如果活动/片段当前已启动),则启动加载器。否则,将重新使用上次创建的加载程序。

换句话说,initLoader()只会在onCreateLoader()尚未创建时触发Loader。在后续调用中,Loader将被重用。

如果您需要强制销毁/创建现有Loader,则应拨打LoaderManager#restartLoader()