5

我想通知ViewPagerAdapter該數據集在Loader.onLoadFinish回調函數中發生了變化。如何在onLoadFinish回調方法中提交FragmentPagerAdapter中的Fragment事務?

由於片段的狀態可能會被保存,因此被阻止。

LoaderManager.LoaderCallbacks.onLoadFinished(Loader loader, D data)方法的文檔:

需要注意的是,通常一個應用程序是不允許犯片段交易,而在此調用,因爲它可以活動的狀態之後發生的事情是saved.`

我怎樣才能克服這個問題?我如何檢查Activity是哪個狀態並提交Fragment事務?

回答

4

我特地用以下解決方案:

方法changeCursorInOtherThreadonLoadFinishedonLoaderReset使用。

HandlerActivity創建:

private Handler mHandler = new Handler(); 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    mSaved = true; 

} 

private void changeCursorInOtherThread(final Cursor data) { 
    if(!mSaved){ 
     mHandler.post(new Runnable() { 

      @Override 
      public void run() { 
       mViewPagerAdapter.changeCursor(data); 
      } 
     }); 
    } 
} 
1

我也有類似的問題。想要在onLoadFinished()之後顯示DialogFragment。正如你所說的,在onLoadFinished()內部不可能提交片段事務。但後來我意識到,我可以在DialogFragment中執行LoaderCallbacks。它就像一個魅力。而不是傾聽LoaderActivity內完成工作,而是在Fragment內部完成工作。

你可以這樣做。您可以在您的活動中執行onLoadFinished(),而不是在您的ViewPager中放置的片段中執行它。當然在某些情況下,它在ViewPager中沒有意義,這取決於您的數據結構。

還有更多關於此問題的討論here

相關問題