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