Использование приложения, в котором используются несколько фрагментов, и следующий код для извлечения выбранной позиции фрагмента.GetTag of Fragment возвращает нулевую ссылку на объект
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() 'в отношении нулевого объекта refrence.
замены фрагмента, используя следующий код
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: да, проверяя тег при замене фрагмента, обновленный ответ с заменяющим код кодом. – Swift
Можете ли вы добавить код, из которого вы вызываете этот метод. Потому что может быть менеджером фрагментов. –