Ошибка фрагмента Android NullPointerException
Я пытаюсь использовать следующий код, чтобы открыть Fragment
это внутри другого фрагмента, но дает мне исключение нулевого указателя без причины.
Fragment newFragment = new SecondFragment();
// consider using Java coding conventions (upper char class names!!!)
FragmentTransaction transaction = getFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.menuitem_detail_container, newFragment);
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
Этот кусок кода находится внутри основного onItemClickListener
внутри onCreateView
метод внутри фрагмента (android.support.v4.app.Fragment
)
Любые идеи о том, что я могу делать не так?
3 ответа
На getFragmentManager вы должны использовать getActivity().getSupportFragmentManager()
или же getChildFragmentManager()
вместо getFragmentManager. Если NPE выбрасывается в транзакции.replace(), вы должны убедиться, что вы заменяете раскладку, например, на
RelativeLayout rl = (RelativeLayout) getActivity().findViewById(R.id.menuitem_detail_container);
transaction.replace(rl.getId(), newFragment);
Выше приведен только пример, потому что я не знаю ваш кодекс, но вы можете получить идею. В этом примере я предполагаю, что используемый вами макет контейнера имеет то же имя в XML-коде действий.
Просто убедитесь, что вы не пытаетесь заменить что-то, возвращающее ноль. Если вы используете контейнер из вашего onCreate, попробуйте войти в него, чтобы узнать, является ли он пустым.
Если это не помогает, пожалуйста, опубликуйте свой вывод Logcat.
Ищите мою транзакцию.
action.replace(R.id.provas_view, new ListaProvasFragment(), ListaProvasFragment.class.getCanonicalName());
Когда вы используете вложенные фрагменты, вам нужно получить getChildFragmentManager() для внутренних фрагментов.
Также убедитесь, что вы импортируете из библиотеки поддержки и FragmentManager, и ChildFragmentManager.