2016-09-29 49 views
0

我使用的是加載Fragment ListFragment DetailActivityFragment D在應用程序打開時會更改工具欄標題。當用戶離開Fragment D,回到Fragment L我想將toolbar重置爲其原始標題。OnBackStackChange監聽器中的應用程序崩潰(無法獲取片段)

這裏是我在mainActivity檢查Fragment D是否關閉的代碼。

getSupportFragmentManager().addOnBackStackChangedListener(new android.support.v4.app.FragmentManager.OnBackStackChangedListener() { 
     @Override 
     public void onBackStackChanged() { 
      Log.d("backstackbug", "back stack count = " + getSupportFragmentManager().getBackStackEntryCount()); 
      if(getSupportFragmentManager().getBackStackEntryCount()>0) { 
      } else { 
       ((ListFragment) getSupportFragmentManager().findFragmentByTag("LIST_F_TAG")).resetToolbar(); 

      } 
     } 
    }); 

堆棧跟蹤說我不能在空對象引用上調用ListFragment.resetToolbar()。 (我在手機上會發布整個痕跡)。 我不明白如果ListFragment位於後退堆棧中,它可能爲空。

交易:

private void launchListFragment(int scope){ 

    getSupportFragmentManager().popBackStack ("detail", FragmentManager.POP_BACK_STACK_INCLUSIVE); 

    Fragment newDetail = ListFragment.newInstance(scope); 
    getSupportFragmentManager().beginTransaction() 
      .replace(R.id.fragment_container, newDetail, "LIST_F_TAG") 
      .commit(); 
} 
+1

請確認而片段的交易已經使用getSupportFragmentManager()或getFragmentManager() – Nitesh

+0

我已經使用getSupportFragmentManager。我在問題中添加了更多代碼 – fgoogle

回答

0

我想你倒的,如果塊。試試這個

@Override 
public void onBackStackChanged() { 
    Log.d("backstackbug", "back stack count = " + getSupportFragmentManager().getBackStackEntryCount()); 
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) { 
     ListFragment listFragment = (ListFragment) getSupportFragmentManager().findFragmentByTag("LIST_F_TAG"); 
     if (listFragment != null) { 
      listFragment.resetToolbar(); 
     } 
    } 
} 
+0

這似乎解決了這個問題。謝謝,當我複製代碼時,我可能會搞砸了。 – fgoogle

0

我認爲這個問題是您不添加片段到堆棧中

fragmentTransection.addToBackStack(fragmentTag); 

執行此步驟之前提交