使用一個應用程序,其中使用多個片段,並使用 以下代碼來獲取片段的選定位置。片段GetTag返回空對象參考
private BaseFragment getSelectedFragment(FragmentManager fragmentManager)
{
int item = getModel().getSelectedItem();//0th position last
String tag = String.valueOf(item);
BaseFragment fragment = (BaseFragment) fragmentManager.findFragmentByTag(tag); //error shown at this line
return fragment;
}
並調用上述方法從
public boolean onBackPressed()
{
FragmentManager fragmentManager = activity.getFragmentManager();
BaseController fragmentController = getSelectedFragment(fragmentManager).getController();
}
和墜毀由於下列錯誤
顯示java.lang.NullPointerException:嘗試調用虛擬方法「java.lang.String中xxx.android .fwk.app.fragment.BaseFragment.getTag()'在空對象引用上。
通過使用下面的代碼
private void displaySelectedFragment()
{
FragmentManager fragmentManager = getFragmentManager();
if (fragmentManager.getBackStackEntryCount() > 0) {
// pop any inner fragments that have been added.
fragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
// get the selected item position
int selectedItem = model.getSelectedDrawerItem().getItemId();
String tag = String.valueOf(selectedItem);
Bundle extras = model.getExtras();
BaseFragment newFragment = NomadFragmentManager.getInstance().getFragment(selectedItem, extras);
if (newFragment != null) {
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.replace(R.id.container, newFragment, tag);
ft.commit();
}
}
有啥實際問題的原因更換一個片段?挖掘到這個代碼。 任何幫助很appriciated。 在此先感謝
雖然替換片段,你正在給一個'標籤'片段或不? –
@SurenderKumar:是的,在替換片段時證明標籤,用片段替換代碼更新答案。 – Swift
您可以從調用此方法的位置添加代碼。因爲可能是片段管理器即將空。 –