AsyncTaskLoader在片段上无法正常工作

时间:2014-12-10 13:40:56

标签: android android-fragments loader

我正在尝试实现在片段中运行的AsyncTaskLoader,但我不确切地知道onLoadFinished永远不会被调用的原因。我不确定我传递的背景是否合适。

这是基本和自定义的AsyncTaskLoader:

public static class CustomAsyncLoader extends AsyncTaskLoader<String> 
{ 
       public CustomAsyncLoader(Context context) { 
          super(context); 
          // do some initializations here 
       } 

       @Override
       protected void onForceLoad() {
            // TODO Auto-generated method stub
            super.onForceLoad();
       }

       @Override
        public void deliverResult(String apps) {

       }

       @Override
        protected void onStopLoading() {
            // Attempts to cancel the current load task if possible
            cancelLoad();
        }

       @Override
        public void onCanceled(String apps) {
            super.onCanceled(apps);
        }

        @Override
        public String loadInBackground() {
             String result = ""; 
              // ... 
              // do long running tasks here 
              // ... 
              return result;            
        }
}

在这里,我将向您展示被覆盖的3种方法:

@Override
public Loader<String> onCreateLoader(int arg0, Bundle arg1) {
    // TODO Auto-generated method stub
    return new CustomAsyncLoader(root.getContext());
}

@Override
public void onLoadFinished(Loader<String> arg0, String arg1) {
    // TODO Auto-generated method stub
    Toast.makeText(mContext, "onLoadFinish", Toast.LENGTH_LONG).show();
}

@Override
public void onLoaderReset(Loader<String> arg0) {
    // TODO Auto-generated method stub

} 

在my片段的onResume方法中,我调用init来加载:

getLoaderManager().initLoader(0, null, this).forceLoad();

以及要评论的最后一个细节是片段如何实现加载器回调:

public class FragmentName extends CustomFragment implements LoaderManager.LoaderCallbacks<String> 

让我们看看是否有人可以帮助我实现它。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您必须使用super.deliverResult(apps)方法拨打deliverResult。否则,您的CustomAsyncLoader的超类不会负责将结果传递给已注册的听众。