2015-10-15 90 views
1

我有一些從片段中的列表導航到其詳細片段的問題。在片段中處理onBackPressed

這是我的層次:

MainActivity (with NavigationDrawer) 
       | 
    ----- WrapperFragment----- 
     |     | 
RequestsFragment DetailFragment 
     | 
RequestListFragment 

換句話說,Wrapperfragment是片段由NavigationDrawer設置。 裏面有RequestsFragment,它包含一個ViewPager和幾個RequestListFragments。 通過點擊一個項目,DetailFragment應該是活動片段。按回來,你應該採取RequestListFragment。

基本上,我只是想要一個支持選擇項目,導航到其DetailFragment並通過回退導航的列表。 這就是爲什麼我建立了Wrapper,它應該交換碎片。

這是我的代碼:

WrapperFragment:

public void setList() { 
    ... 
    getChildFragmentManager().beginTransaction() 
    .replace(R.id.request_wrapper, listfragment) 
    .addToBackStack(null) 
    .commit(); 
} 

public void setDetail() { 
    ... 
    getChildFragmentManager().beginTransaction() 
    .replace(R.id.request_wrapper, detailfragment) 
    .addToBackStack(null) 
    .commit(); 
} 

當我點擊一個ListItem,我看到了DetailFragment,但逼人退關閉應用程序,而不是帶我回ListFragment。

你們能幫我嗎?

謝謝!

P.S:我使用的是支持庫

回答

3

這是因爲迴轉到以前的活動不分段,再沒有。您必須手動處理背面印刷機,方法是將其像這樣捕獲;

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) { 
     Log.d(this.getClass().getName(), "back button pressed"); 
    } 
    return super.onKeyDown(keyCode, event); 
} 

或者像這樣;

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

有關您的問題,您可以使用此代碼手動彈出Fragments backstack。

@Override 
public void onBackPressed() { 
    // if there is a fragment and the back stack of this fragment is not empty, 
    // then emulate 'onBackPressed' behaviour, because in default, it is not working 
    FragmentManager fm = getSupportFragmentManager(); 
    for (Fragment frag : fm.getFragments()) { 
     if (frag.isVisible()) { 
      FragmentManager childFm = frag.getChildFragmentManager(); 
      if (childFm.getBackStackEntryCount() > 0) { 
       childFm.popBackStack(); 
       return; 
      } 
     } 
    } 
    super.onBackPressed(); 
} 
+0

我剛剛使用另一個活動,它顯示的細節。對我來說,這是一個更自然的流程。儘管如此,你的答案也是如此。 – Mau04