2

我尝试与之合作AsyncTaskLoader,但我遇到了一个问题。我从互联网加载AsyncTaskLoader数据,然后在方法中启动其他活动(BusModelsActivity)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);
       }

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

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

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

4

2 回答 2

0

Try:

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);
   }
于 2014-03-04T08:58:23.833 回答
0

恐怕要告诉你,AsyncTask到目前为止的行为并不是 100% 被允许的。你有两种方法可以克服这个问题。

1) 用 aThread而不是AsyncTask. 这将确保您的代码只会执行一次,因为Thread在您需要之前永远不会启动两次。如下

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

2)在您最初调用的值中声明一个static参数,并在第一次加载页面后将其设置为内部,并在执行代码之前检查其值,如下所示:activityisPageLoadedfalsetrueonLoadFinishedonLoadFinished

@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;
       }
   }
于 2014-03-04T08:49:33.143 回答