2013-07-17 2 views
0

У меня есть 2 фрагмента A и B в моем приложении. mainactivity начинается с фрагмента А. по нажатию кнопки в нем я заменить его фрагмент B.Навигация между двумя фрагментами

FragmentManager fm = getSupportFragmentManager(); 
B_Fragment pfrag = new B_Fragment(); 
pfrag.setArguments(args); 
fm.beginTransaction().replace(R.id.frag_container, pfrag) 
     .addToBackStack("A_Fragment").commit(); 

Сейчас в фрагменте B я нажать на кнопку, чтобы заменить его фрагмента А с использованием:

fm.popBackStack(); 
fm.beginTransaction().addToBackStack("B_fragment").commit(); 

Фрагмент A успешно выдвигается и выталкивается из стека, где в качестве фрагмента B нет. Каждый раз, когда B_фрагмент уничтожен и создается новый. Так может кто-то сказать мне, что мне не хватает, и как нажимать фрагмент B на стек и выходить одновременно.

+0

Насколько я знаю, 'replace()' вызывает 'remove()' на существующий фрагмент, который уничтожит его. Вместо 'replace()' попробуйте 'hide()' существующий, а затем 'add()' новый. –

+0

из http://developer.android.com/training/basics/fragments/fragment-ui.html-> Примечание.> Когда вы удаляете или заменяете фрагмент и добавляете транзакцию в задний стек, удаляемый фрагмент остановлен (не разрушен). Если пользователь переместится назад для восстановления фрагмента, он перезагрузится – vaibhav

ответ

2
FragmentManager fm = getSupportFragmentManager(); 
B_Fragment pfrag = new B_Fragment(); 
pfrag.setArguments(args); 
fm.beginTransaction().replace(R.id.frag_container, pfrag).commit(); 

На Fragment B, почему не просто заменить его Fragment A

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.replace(R.id.pnlLeft, details); 
ft.commit(); 

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

fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 

до загрузки другого фрагмента

beginTransaction() 
replace() Or add() 
commit() 

При нажатии the button in Fragment B попробуйте использовать нижеследующий код. Это перезагрузит entire fragment.

FragmentManager fm = getSupportFragmentManager(); 
if (fm.getBackStackEntryCount() > 0) { 
    fm.popBackStack(); 
} 
+0

, я попробовал его, но метод onDestroy и onDetach моего фрагмента B все еще был вызван, подразумевая, что он не толкается в стеке – vaibhav

+0

Почему переопределить метод onDestroy? Попробуйте обновление и дайте мне знать. – Thalaivar

+0

, чтобы проверить, не наложено ли оно на стек или нет. Фрагмент A правильно нажимается и выталкивается. по какой-то причине фрагмент B не был нажат. – vaibhav

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