2014-03-04 130 views
1

我嘗試使用AsyncTaskLoader,我遇到了一個問題。我在AsyncTaskLoader數據加載從互聯網上再方法來啓動其他活動(BusModelsActivity)onLoadFinishedonLoadFinished當我點擊從其他活動的按鈕時調用

@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或單擊按鈕。

+0

你調用'onRestart();'或'onResume()'方法嗎? –

+0

@Shayan pourvatan不,我沒有 – Abbath

+1

你能發表更多的代碼嗎?你在哪裏調用'onLoadFinished'? –

回答

0

我不敢告訴你,AsyncTask行爲到現在還沒有100%授予。你有兩種方法可以解決這個問題。

1)在Thread而不是AsyncTask中執行您的操作。這將確保您的代碼只會執行一次,因爲Thread永遠不會啓動兩次,直到您需要爲止。作爲繼

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

2)中聲明你的activity一個static參數調用isPageLoaded最初與價值false,並在第一時間加載你的頁面後,將其設置爲trueonLoadFinished內,執行你的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; 
     } 
    } 
+0

謝謝,我使用AsyncTask加載器,我沒有簡單的AsyncTask問題。 – Abbath

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); 
    } 
相關問題