当我从另一个Activity点击后退按钮时调用onLoadFinished

时间:2014-03-04 08:23:30

标签: android android-asynctask asynctaskloader

我尝试使用AsyncTaskLoader,我有一个问题。我从互联网加载AsyncTaskLoader数据,然后在方法onLoadFinished中启动其他活动(BusModelsActivity)

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

但是当我单击活动BusModelsActivity并返回到BusSearchParamActivity方法onLoadFinished再次运行时,BusModelsActivity再次启动。怎么办呢?点击按钮时我会调用其他活动:

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

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

2 个答案:

答案 0 :(得分:0)

我不敢告诉你,到目前为止AsyncTask行为并非100%被批准。您有两种方法可以解决这个问题。

1)以Thread代替AsyncTask执行您的操作。这将确保您的代码只会执行一次,因为Thread永远不会开始两次,直到您想要这样做。如下

new Thread(new Runnable() {
        @Override
        public void run() {
            /All your code here
        }
    }).start();

2)在您的static activity参数中声明isPageLoaded,最初的值为false,并在true内将其设置为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;
       }
   }

答案 1 :(得分:0)

尝试:

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