处理片段中的onBackPressed



我从Fragment中的列表导航到它的detail Fragment有一些问题。

这是我的层次结构:

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

换句话说,Wrapperfragment是由NavigationDrawer设置的Fragment。在这里面有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();
}

当我点击一个列表项,我看到DetailFragment,但按回关闭应用程序,而不是带我回到ListFragment。

你们能帮帮我吗?

谢谢!

注::我正在使用支持库

这是因为返回到以前的活动而不是片段,并且没有。你必须手动处理背按,像这样捕获它;

@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();
}

最新更新