У меня есть настройки ящика навигации, который по пункту меню мыши заменит фрагмент контейнера с какой новый фрагмент выбирается в меню: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, как я могу, по крайней мере, запретить пользователям возвращаться на страницу отправки формы?
Не включая сообщение в вызове 'addToBackStack' не препятствует фрагмент от добавления к задней стеке, хотя ... – Simon
Что вы хотите сделать? вы хотите добавить фрагмент в backstack или нет? –
Нет, мне показалось, что я четко определил, что хочу в этом вопросе. Я хочу добавить фрагмент ANOTHER в backstack вместо того, который я сейчас нахожу. Таким образом, пользователи не могут нажать кнопку «Назад», чтобы вернуться к фрагменту представления формы, и вместо этого увидите фрагмент резюме. – Simon