2

У меня есть HomeFragment, что есть кнопка, которая при нажатии на вызовы следующее:Возобновление предыдущего фрагмента onBackPressed()?

Fragment frag = new CustFragment(); 
FragmentManager fragmentManager = getFragmentManager(); 
fragmentManager.beginTransaction().replace(R.id.home_container, frag).commit(); 

Тогда в моей FragmentActivity который фрагменты, упомянутые выше, у меня есть:

@Override 
public void onBackPressed() { 

    getFragmentManager().popBackStack(); 
    super.onBackPressed(); 

} 

Вот что я я попытался, но если я нахожусь на фрагменте frag, и я нажимаю кнопку «Назад», он не возвращается к последнему фрагменту (HomeFragment). Вместо этого он пытается вернуться к последнему Activity, но поскольку его нет (например, предыдущее действие вызывало на нем finish()), оно просто переходит на главный экран Android.

Что я делаю неправильно?

PS: Если я не понимаю, просто комментарий ниже, и я попытаюсь прояснить.

ответ

5

Изменение

@Override 
public void onBackPressed() 
{ 
    getFragmentManager().popBackStack(); 
    super.onBackPressed(); 
} 

в

@Override 
public void onBackPressed() 
{ 
    if(getFragmentManager().getBackStackEntryCount() > 0) 
    getFragmentManager().popBackStack(); 
    else 
    super.onBackPressed(); 
} 

и

fragmentManager.beginTransaction().replace(R.id.home_container, frag).commit(); 

до

fragmentManager.beginTransaction().replace(R.id.home_container, frag).addToBackStack(null).commit(); 
+1

OnBackPressed не нужен, если вы используете addToBackStack – Kuno

+1

@KlassenK Если он не делает этого 'super.onBackPressed();' будет непосредственно выходить из 'Activity ' – Apoorv

+0

Попробуйте добавить« addToBackStack (null) »к вашей транзакции, как я связан в своем ответе, и полностью удалить onBackPressed. – Kuno

1

beginTransaction создает новое FragmentTransaction. Он имеет метод addToBackstack. Если вы вызываете это, прежде чем совершать транзакцию, вы можете полностью удалить свой переопределенный onBackPressed. Reference

2

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

fragmentManager.beginTransaction().replace(R.id.home_container, frag).addToBackStack(null).commit(); 
1

Вы можете использовать:

fragmentTransaction.addToBackStack(null); 

и нет необходимости заботиться о onBackPressed().

BTW в вашем onBackPressed()super.onBackPressed() означает, что вы ничего не меняете.

Это должно было быть что-то вроде:

if(currentFragmentIsCustFragment){ 
    getFragmentManager().popBackStack(); 
}else{ 
    super.onBackPressed(); 
} 
+0

Ох, хорошо. Подождите, почему мне не нужно заботиться о 'onBackPressed'? Будет ли он автоматически удаляться из стека, если я нажму кнопку «Назад» без меня, чтобы его реализовать? – ujvl

+0

Да, это позаботится 'fragmentTransaction.addToBackStack (null);' –

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