Я довольно новый с андроидными фрагментами, поэтому, пожалуйста, несите меня.Пропустить некоторые фрагменты onBackPressed
У меня есть куча фрагментов с использованием одного действия в качестве хоста.
На мой взгляд, мои фрагменты сгруппированы по разделам, хотя они по-прежнему являются модульными/многоразовыми по коду. Рассмотрим этот желаемый сценарий:
Frag1 -> (Нажмите Next) -> Frag2 -> (Нажмите Next) -> Frag3 -> (Нажмите Назад) -> Frag1
После прохождения через серии фрагментов, я бы хотел пропустить некоторые предыдущие фрагменты (в этом случае пропустить Frag 2) при нажатии кнопки «Назад».
Однако, в моем текущем коде, моя проблема в том, что, хотя он возвращается к Frag1, Frag3 не исчезает с экрана. Случается, что Frag1 и Frag3 становятся видимыми друг на друга.
Вот мои соответствующие фрагменты кода:
Фрагмент кода для создания Frag1
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
// init the fragment (with a default fragment, not null)
Fragment fragment = PlaceholderFragment.newInstance(position + 1);
// Position number from navigation sidebar starts from 0.
// Since position starts from 0, add 1 to match section number
// as implemented in {@link #onSectionAttached()}
switch(position) {
case 0:
fragment = PlaceholderFragment.newInstance(position + 1);
break;
case 1: // Frag1 case
fragment = new AddPointsFragment().newInstance(position + 1, "");
break;
default:
break;
}
// update the main content by replacing fragments
FragmentManager fragmentManager = getFragmentManager();
// clear all fragments from previous section from the back stack
fragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
// replace all currently added fragments in container and replace with the new fragment
fragmentManager.beginTransaction()
.replace(R.id.container, fragment)
.commit();
}
Фрагмент кода для создания Frag2
public void onEnterButtonFragmentInteraction(int sectionNumber, String cardNo) {
// TODO: Add point for given card number
int points = 5; //sample points
AddPointsSuccessFragment addPointsSuccessFragment =
new AddPointsSuccessFragment().newInstance(sectionNumber, cardNo, points);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, addPointsSuccessFragment)
.addToBackStack(null)
.commit();
}
Фрагмент кода для создания Frag3
public void onOkButtonFragmentInteraction(int sectionNumber, String cardNo, int points) {
RedeemRewardFragment redeemRewardFragment =
new RedeemRewardFragment().newInstance(sectionNumber, cardNo, points);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.container, redeemRewardFragment);
fragmentTransaction.commit();
}
Мой текущий обходной путь для этого является добавление .addToBackStack(null)
в создании Frag3 и работает этот код
public void onBackButtonFragmentInteraction() {
this.onBackPressed(); // simulate pressing of activity back button
FragmentManager fragmentmanager = getFragmentManager();
fragmentmanager.popBackStack(); // pop Frag2 from back stack
}
сразу после вызова метода onBackPressed(). К сожалению, это обходное решение является уродливым, поскольку потому, что перед Frag1 возникает раздвоенный внешний вид Frag2.
Я попробовал ваше предложение, но, к сожалению, на экране все еще отображается Frag2 в течение секунды, прежде чем вернуться в Frag1 , Я также добавил фрагмент кода для Frag1 для лучшей перспективы. :( –
После дальнейших экспериментов я узнал, что после реализации вашего предложения я больше не должен называть this.onBackPressed(). И теперь он работает «... как будто фрагментов между ними никогда не было». Спасибо !;) –
Я следил за тем же, но он не работает для меня. Можете, пожалуйста, проверить, что я делаю неправильно здесь. Http://stackoverflow.com/questions/31118973 – pyus13