Невозможно добавить в стек фрагментов

Открываю «Действие А». «Действие А» немедленно делает FragmentTransaction подобное, чтобы открыть «Фрагмент А»:

FragmentTransaction t = fm.beginTransaction();
ListFragment f = new ProfileFragment();
t.replace(R.id.main_frag, f, "act_frag");
f.setArguments(args);
t.commit();

На «Фрагменте A» есть кнопка, на которой я хотел бы открыть новый Fragment («Фрагмент B»), но оставить «Фрагмент A» в backstack - так что, если пользователь ответит, он все еще рядом. Итак, я делаю это:

FragmentTransaction t = fm.beginTransaction();
ListFragment f = new FollowFragment();
String username = tvUser.getText().toString();
Bundle args = new Bundle();
args.putString("follow", "watching");
args.putString("userprofile", username);
args.putInt("userIdprofile", userId);
f.setArguments(args);
t.replace(R.id.main_frag, f, "watching_frag");
t.addToBackStack("watching_frag");
t.commit();

Я думал, что добавление t.addToBackStack(null); поможет; и я делал это раньше. Но вместо этого, когда пользователь отвечает, он просто закрывает «Activity A».


person TheLettuceMaster    schedule 27.10.2014    source источник
comment
Обратитесь к моему ответу ... ‹stackoverflow.com/questions/14971780/  -  person MD Khali    schedule 30.07.2018
comment
Обратитесь к моему ответу ... ‹stackoverflow.com/questions/14971780/  -  person MD Khali    schedule 30.07.2018


Ответы (2)


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

@Override
public void onBackPressed() {

    FragmentManager fm = getSupportFragmentManager();
    if(fm.getBackStackEntryCount() > 0){
        fm.popBackStack();
        return;
    }
    super.onBackPressed();
}

Таким образом, когда нажата кнопка «Назад», она сначала проверит, есть ли какие-либо записи в стеке, а при нажатии кнопки «Назад» - всплывающее окно, в противном случае вызывается действие по умолчанию.

person Eric    schedule 27.10.2014
comment
Подождите ... происходит ли транзакция фрагмента для добавления «Фрагмента B» внутри «Фрагмента A» или действия? - person Eric; 27.10.2014
comment
Это повторяется во фрагменте B. Теперь, когда я думаю об этом, это не всегда лучшая практика, если я припоминаю. (Fragments общаются друг с другом). Но суть того, что мне нужно, все равно остается в силе, несмотря на это. - person TheLettuceMaster; 27.10.2014

Вы пробовали поместить какое-то значение в t.addtoBackStack вместо просто null? Я не могу сейчас проверить это, но думаю, это может быть ваша проблема.

person Vextil    schedule 27.10.2014
comment
Спасибо, но это не сработало; Я изменил приведенный выше код, чтобы отразить то, что я сделал. - person TheLettuceMaster; 27.10.2014
comment
Что ж, странно. Я проверил ваш код, и он отлично работает. Вы случайно не переопределяете onBackPressed ()? - person Vextil; 27.10.2014