我使用的是加載Fragment List
和Fragment Detail
的Activity
。 Fragment 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();
}
請確認而片段的交易已經使用getSupportFragmentManager()或getFragmentManager() – Nitesh
我已經使用getSupportFragmentManager。我在問題中添加了更多代碼 – fgoogle