我有一些问题从Fragment中的列表导航到其详细信息片段。
这是我的等级:
MainActivity (with NavigationDrawer)
|
----- WrapperFragment-----
| |
RequestsFragment DetailFragment
|
RequestListFragment
换句话说,Wrapperfragment是NavigationDrawer设置的Fragment。 在其中有RequestsFragment,它包含一个带有多个RequestListFragments的ViewPager。 通过单击项目,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。:我正在使用支持库
答案 0 :(得分:3)
那是因为回到之前的Activity not Fragment,而没有。你必须像这样捕捉它来手动处理背压;
@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();
}