Android Studio getSupportFragment. beginTransaction().замена вызывает сбои при переходе к другому фрагменту(Java)

#java #android #android-fragments

Вопрос:

Я пытаюсь реализовать боковую панель навигации (меню гамбургеров). Я хочу иметь возможность выбрать новый фрагмент для просмотра в этом меню, а затем нажать кнопки на этом фрагменте, чтобы перейти к другому фрагменту (не в списке меню гамбургеров).

Я следовал за гидом (https://www.youtube.com/watch?v=bjYstsO1PgI), но он не показывает второй шаг перенаправления на другой фрагмент.

Я продолжаю получать сбой всякий раз, когда нажимаю кнопку, которая перенаправляет на другой фрагмент, если он был загружен меню гамбургера.

Строка, которую я использую для рендеринга из меню гамбургеров, — это:

 getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new FirstFragment()).commit();
 

Это вызывается следующим прослушивателем событий:

  NavigationView navigationView = findViewById(R.id.nav_view);
 navigationView.setNavigationItemSelectedListener(this);
 

и я получаю эту ошибку всякий раз, когда нажимаю кнопку, чтобы перейти к «другому» фрагменту.

 Navigation action/destination com.example.testApp:id/action_FirstFragment_to_submitScreen cannot be found from the current destination Destination(com.example.testApp:id/submitScreen) label=fragment_submit_screen class=com.example.renamedTestApp.SubmitScreen
 

Эта ошибка отсутствует, когда я использую

 <include layout="@layout/content_main"/>
 

чтобы загрузить первый фрагмент при запуске приложения (тот, который находится в меню гамбургера).

Какие-нибудь советы? Этот вопрос может сбить с толку, поэтому дайте мне знать, следует ли мне привести в порядок свое объяснение. Я полагаю, что ошибка может быть в том, что фрагмент не полностью загружен, возможно? Если это так, то какую линию было бы лучше использовать для переключения на лету.

Ответ №1:

предоставьте какой-нибудь код

попробуйте это

 FragmentManager fragmnt= getActivity().getSupportFragmentManager();
FragmentTransaction tr= fragmnt.beginTransaction();
tr.replace(R.id.YOUR,new Yourfragment());
//or tr.replace(R.id.content_frame, new Yourfragment());
tr.commit();
 

Комментарии:

1. Я не совсем уверен, что понимаю. Разве это не тот самый код, который я привел в своем вопросе, просто разнесенный на несколько строк?

2. Простите меня, но я не уверен, какой код вы хотели бы видеть. Я включил прослушиватель событий, который вызывает код, который я показал в своем первоначальном сообщении.

3. это кажется прекрасным ,попробуйте simplifiedcoding.net/…