0

У меня есть настройки ящика навигации, который по пункту меню мыши заменит фрагмент контейнера с какой новый фрагмент выбирается в меню:Android добавить новый/иной фрагмент в backstack

public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     switch (id) { 
      case R.id.nav_new: 
       if (subInfo.isEmpty()){ 
        addFragment(new NewFragment(), id); 
       } else { 
        addFragment(new SubjectInfoFragment(), id); 
       } 
       break; 
      case R.id.nav_start: 
       addFragment(new StartFragment(), id); 
       break; 
      case R.id.nav_save: 
       addFragment(new SaveFragment(), id); 
       break; 
      case R.id.nav_raw: 
       addFragment(new RawFragment(), id); 
       break; 
      case R.id.nav_accelerometer: 
       addFragment(new AccelerometerFragment(), id); 
       break; 
      case R.id.nav_accelerometerWorld: 
       addFragment(new AccelerometerWorldFragment(), id); 
       break; 
      case R.id.nav_gyroscope: 
       addFragment(new GyroscopeFragment(), id); 
       break; 
     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

и метод добавление фрагментов:

public void addFragment(Fragment fragment, int id) { 
     if (fragment != null) { 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

      if (fragmentManager.getFragments() == null) { 
       fragmentTransaction.replace(R.id.fragment_container, fragment, fragment.getClass().getSimpleName()) 
         .commit(); 
      } else { 
       fragmentTransaction.replace(R.id.fragment_container, fragment, fragment.getClass().getSimpleName()) 
         .addToBackStack(Integer.toString(id)) 
         .commit(); 
      } 
     } 
    } 

В одном из моих фрагментов (NewFragment()) есть форма вставки данных, идентификатор этого пункта меню является nav_new. Когда кнопка нажата представить, метод addFragment призван направить пользователя к другому фрагменту (StartFragment()) в моем приложении:

mainActivity.addFragment(new StartFragment(), R.id.nav_new); 

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

Я разработал мой метод onNavigationItemSelected для поддержки этого. Когда нажимается элемент меню nav_new, он проверяет, уже ли пользователь уже ввел какую-либо информацию. Если они этого не сделали, произойдет транзакция, которая приведет их к NewFragment, чтобы ввести информацию о форме. Если у них есть, SubjectInfoFragment показан вместо того, чтобы отобразить сводку их ранее введенной информации

я должен направить их StartFragment на форме представить, но тогда старая форма фрагмент добавляется в backstack, что нежелательно

После отправки формы, как мне обрабатывать транзакции фрагментов, так что кнопка «Назад» приведет их к совершенно новому фрагменту (SubjectInfoFragment) вместо того, чтобы вернуть их на страницу отправки формы?

Или в худшем случае, если я не могу добавить совершенно новый фрагмент в backstack, как я могу, по крайней мере, запретить пользователям возвращаться на страницу отправки формы?

ответ

0

вы должны использовать следующую строку, чтобы добавить фрагмент в backstack:

getFragmentManager.addToBackStack(tag or null); 
+0

Не включая сообщение в вызове 'addToBackStack' не препятствует фрагмент от добавления к задней стеке, хотя ... – Simon

+0

Что вы хотите сделать? вы хотите добавить фрагмент в backstack или нет? –

+0

Нет, мне показалось, что я четко определил, что хочу в этом вопросе. Я хочу добавить фрагмент ANOTHER в backstack вместо того, который я сейчас нахожу. Таким образом, пользователи не могут нажать кнопку «Назад», чтобы вернуться к фрагменту представления формы, и вместо этого увидите фрагмент резюме. – Simon

Смежные вопросы