使用一个应用程序,其中使用多个片段,并使用 以下代码来获取片段的选定位置。片段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
您可以从调用此方法的位置添加代码。因为可能是片段管理器即将空。 –