【发布时间】:2016-09-17 07:12:58
【问题描述】:
使用使用了多个片段的应用程序,并且 以下代码获取片段的选定位置。
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();
}
}
那么真正的问题原因是什么?深入研究这段代码。 任何帮助都非常感谢。 提前致谢
【问题讨论】:
-
在替换片段时,您是否给片段添加了“标签”?
-
@SurenderKumar :是的,在替换片段时证明标签,用片段替换代码更新答案。
-
你能在调用这个方法的地方添加代码吗?因为可能是片段管理器即将为空。
-
尝试检查您设置为片段的标签,同时使用日志查找片段时替换相同。试试这个。
-
@SurenderKumar : 在这一行将 Fragment 设为 null BaseFragment fragment = (BaseFragment) fragmentManager.findFragmentByTag(tag);
标签: android android-fragments nullpointerexception fragment fragmentmanager