Android: LoaderCallbacks.OnLoadFinished called twice

前端 未结 10 2314
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-04 11:05

I noticed strange situation using Android Loaders and Fragments. When I invoke LoaderManager.initLoader() after orientation change onLoadFinished is not called (although doc

10条回答
  •  旧时难觅i
    2020-12-04 11:32

    I solved the problem of onLoadFinished being called twice like this. In your Fragment.onActivityCreated() init your Loader like this

    if (getLoaderManager().getLoader(LOADER_ID) == null) {
        getLoaderManager().initLoader(LOADER_ID, bundle, loaderCallbacks);
    } else {
        getLoaderManager().restartLoader(LOADER_ID, bundle, loaderCallbacks);
    
    }
    

    here loaderCallbacks implements your usual Loader callbacks

    private LoaderManager.LoaderCallbacks loaderCallbacks
            = new LoaderManager.LoaderCallbacks() {
        @Override
        public Loader onCreateLoader(int id, Bundle args) {
            ...
            ...
        }
    
        @Override
        public void onLoadFinished(Loader loader, T data) {
            ...
            ...
        }
    
        @Override
        public void onLoaderReset(Loader loader) {
            ...
            ...
        }
    };
    

提交回复
热议问题