2012-11-16 55 views
0

我的應用程序通常會多次添加並刪除同一個片段。下面是我如何做到這一點:如何頻繁地添加和刪除相同的片段

Add fragment

if (mHomeFragment == null) 
    { 
     mHomeFragment = new HomeFragment(); 
     new Handler().postDelayed(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       getSupportFragmentManager().beginTransaction().add(R.id.dummy, mHomeFragment).commit(); 
      } 
     }, getResources().getInteger(R.integer.transition_duration)); 
    } 
else 
    { 
     getSupportFragmentManager().beginTransaction().add(R.id.dummy, mHomeFragment).commit(); 
    } 

Remove fragment

getSupportFragmentManager().beginTransaction().remove(mHomeFragment).commit(); 

問題是,有時我的應用程序崩潰時從活動導航包含片段(HomeFragment)到另一個活動。我試圖找出原因,但仍然沒有辦法。我沒有在這裏完全錯誤日誌,因爲該錯誤不經常發生,但錯誤是相同這樣https://android.googlesource.com/platform/frameworks/support/+/5506618c80a292ac275d8b0c1046b446c7f58836%5E!/

IllegalStateException: Failure saving state......active HomeFragment{419494f0} has cleared index: -1 

有誰看到任何問題,我的代碼,或只是知道如何解決這個錯誤,請幫幫我。謝謝大家。

+1

我認爲當你刪除你想要稍後添加的片段時,你需要在事務中包含一個.addToBackStack(「name」),並且在稍後想要添加它時,調用FragmentManager.popBackStack( )撤消刪除 – Yenchi

+0

我會試一試,但因爲這個錯誤不會經常發生,所以我不能告訴你這個錯誤現在是否仍然發生。謝謝。 – Wayne

回答

1

聽起來好像runnable可能在活動暫停或結束後運行。只要確保在活動onPause方法上調用handler.removeCallback,就可以避免活動完成後的回調。

如果您需要經常交換片段,您可以使用FragmentTransaction hideshow方法,以避免初始化開銷。

+0

我敢肯定,錯誤不是由處理程序,因爲我的片段總是添加之前,去新的活動。我也嘗試使用隱藏和顯示片段,但在我的情況下它不起作用。無論如何,感謝您的回答。 – Wayne

+0

如何初始化片段而不進行託管它們的活動? –

相關問題