2016-08-16 92 views
-1

我有一個活動,它內部有一個ViewPager,裏面持有5個片段,底部佈局具有可在viewpager頁面之間切換的按鈕,但每個片段都可以打開一個新的片段,I我正在替換MainActivity中的片段,如下所示:使用帶可見片段的onBackPressed

FragmentManager fragmentManager = getSupportFragmentManager(); 

Fragment placeDetailsFragment = new PlaceDetailsFragment(); 
fragmentManager.beginTransaction().setCustomAnimations(R.anim.right_in, R.anim.left_out, R.anim.left_in, R.anim.right_out).replace(rootViewID, placeDetailsFragment, fragmentTag.getKey()).addToBackStack(fragmentTag.getKey()).commit(); 

其中rootViewId是頁面中根佈局的ID。

的想法是,我可以從第1頁的viewpager進入到片段1和2頁面片段2。等等。

我希望能夠當我按下硬件後退按鈕在片段1回到頁面1,當我在片段2回到頁面2,但默認的onBackPressed行爲只是彈出最後一個片段添加到堆棧,無論哪一個是可見的,所以如果我打開片段1,然後片段2那麼我回到前面提到的活動的底部視圖中的第1頁,並且當它彈出片段1時,將其彈回片段2,因爲它是當前可見的。

我該如何解決這個問題?

+0

你可能需要基本實現onBackStackChangedListener並在那裏添加你自己的邏輯。 –

+0

@AndreiT你能給我一個例子或鏈接? – EyadMhanna

+0

你能解釋一下你的情況嗎?這很難理解 – BlueMango

回答

0

保存的最後一個片段:

Fragment lastFrag; 
FragmentManager fragmentManager = getSupportFragmentManager(); 

Fragment placeDetailsFragment = new PlaceDetailsFragment(); 
fragmentManager.beginTransaction().setCustomAnimations(R.anim.right_in, R.anim.left_out, R.anim.left_in, R.anim.right_out).replace(rootViewID, placeDetailsFragment, fragmentTag.getKey()).addToBackStack(fragmentTag.getKey()).commit(); 

lastFrag = placeDetailsFragment; 

覆蓋onBackPressed彈出保存的片段:

@Override 
public void onBackPressed() { 

    FragmentManager fragmentManager = getSupportFragmentManager(); 

    fragmentManager.beginTransaction().setCustomAnimations(R.anim.right_in, R.anim.left_out, R.anim.left_in, R.anim.right_out) 
     .replace(rootViewID, lastFrag, fragmentTag.getKey()).addToBackStack(fragmentTag.getKey()).commit(); 

} 

通知lastFrag而不是placeDetailsFragment在.replace內onBackPressed()

+0

這是重新實現默認popBackStack行爲,彈出最後一個片段添加不是當前我需要的可見:) – EyadMhanna