Android 当我从其他活动中单击“上一步”按钮时调用onLoadFinished

Android 当我从其他活动中单击“上一步”按钮时调用onLoadFinished,android,android-asynctask,asynctaskloader,Android,Android Asynctask,Asynctaskloader,我尝试使用AsyncTaskLoader,但有一个问题。我从internet加载AsyncTaskLoader数据,然后在方法onLoadFinished @Override public void onLoadFinished(Loader<List<BusModelParcelable>> loader, List<BusModelParcelable> data) { hideDialog();

我尝试使用
AsyncTaskLoader
,但有一个问题。我从internet加载
AsyncTaskLoader
数据,然后在方法
onLoadFinished

    @Override
       public void onLoadFinished(Loader<List<BusModelParcelable>> loader, List<BusModelParcelable> data) {
           hideDialog();
           Log.d("onLoadFinished", TestTags.TAG1);
           Intent intent = new Intent(BusSearchParamActivity.this,BusModelsActivity.class);
           intent.putParcelableArrayListExtra(AppVariables.BUS_MODELS_LIST, (ArrayList) data);
           startActivity(intent);
       }

其中busModelsCallBack是LoaderCallbacks接口的实现。当我调试时,它只在onLoadFinished上停止,而不是onCreateLoader或单击按钮。

我很抱歉地告诉您,到目前为止,
AsyncTask
行为不是100%授予的。有两种方法可以克服这个问题

1) 在
线程中执行操作,而不是在
异步任务中执行操作。这将确保您的代码只执行一次,因为
Thread
在您需要之前永远不会启动两次。如下

new Thread(new Runnable() {
        @Override
        public void run() {
            /All your code here
        }
    }).start();
2) 在
活动
中声明一个名为
isPageLoaded
静态
参数,初始值为
false
,并在第一次加载页面后将其设置为
onLoadFinished
,并在执行
onLoadFinished
代码之前检查其值以下:

@Override
   public void onLoadFinished(Loader<List<BusModelParcelable>> loader, List<BusModelParcelable> data) {
       if(!isPageLoaded){
       hideDialog();
       Log.d("onLoadFinished", TestTags.TAG1);
       Intent intent = new Intent(BusSearchParamActivity.this,BusModelsActivity.class);
       intent.putParcelableArrayListExtra(AppVariables.BUS_MODELS_LIST, (ArrayList) data);
       startActivity(intent);
       isPageLoaded = true;
       }
   }
@覆盖
public void onLoadFinished(加载程序,列表数据){
如果(!isPageLoaded){
hideDialog();
Log.d(“onLoadFinished”,TestTags.TAG1);
意向意向=新意向(BusSearchParamActivity.this,BusModelsActivity.class);
intent.putParcelableArrayListExtra(AppVariables.BUS_MODELS_LIST,(ArrayList)数据);
星触觉(意向);
isPageLoaded=true;
}
}
试试:

private静态布尔值isClicked=false;
@凌驾
public void onLoadFinished(加载程序,列表数据){
如果(已单击)
{
hideDialog();
Log.d(“onLoadFinished”,TestTags.TAG1);
意向意向=新意向(BusSearchParamActivity.this,BusModelsActivity.class);
intent.putParcelableArrayListExtra(AppVariables.BUS_MODELS_LIST,(ArrayList)数据);
星触觉(意向);
isClicked=false;
}
}
公共无效拾取按钮单击(视图v){
isClicked=true;
getSupportLoaderManager().initLoader(LOADER_MODELS,null,busModelsCallBack);
}

onRestart()上是否调用了方法
onResume()
?@Shayan pourvatan不,我没有,你能发布更多的代码吗?您在哪里调用
onLoadFinished
?@Shayan pourvatan我已经发布了它您在BusSearchParamActivity的onCreate中调用initLoader还是restartLoader?谢谢,我使用AsyncTask loader,简单的AsyncTask没有问题。
@Override
   public void onLoadFinished(Loader<List<BusModelParcelable>> loader, List<BusModelParcelable> data) {
       if(!isPageLoaded){
       hideDialog();
       Log.d("onLoadFinished", TestTags.TAG1);
       Intent intent = new Intent(BusSearchParamActivity.this,BusModelsActivity.class);
       intent.putParcelableArrayListExtra(AppVariables.BUS_MODELS_LIST, (ArrayList) data);
       startActivity(intent);
       isPageLoaded = true;
       }
   }
private static boolean isClicked = false;
@Override
       public void onLoadFinished(Loader<List<BusModelParcelable>> loader, List<BusModelParcelable> data) {
       if(isClicked )
       {
           hideDialog();
           Log.d("onLoadFinished", TestTags.TAG1);
           Intent intent = new Intent(BusSearchParamActivity.this,BusModelsActivity.class);
           intent.putParcelableArrayListExtra(AppVariables.BUS_MODELS_LIST, (ArrayList) data);
           startActivity(intent);
           isClicked = false;
       }
       }

public void pickUpButtonClick(View v) {
       isClicked = true;
       getSupportLoaderManager().initLoader(LOADER_MODELS,null,busModelsCallBack);
   }