gpt4 book ai didi

android - 在 fragment 中处理 onBackPressed

转载 作者:行者123 更新时间:2023-11-29 17:30:42 26 4
gpt4 key购买 nike

我在从 fragment 中的列表导航到其详细 fragment 时遇到了一些问题。

这是我的层次结构:

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

换句话说,WrapperFragment就是NavigationDrawer设置的Fragment。这里面有 RequestsFragment,它包含一个带有多个 RequestListFragment 的 ViewPager。通过单击一个项目,DetailFragment 应该是 Activity fragment 。按返回键,您应该会被带到 RequestListFragment。

基本上,我只想要一个支持选择项目、导航到其 DetailFragment 并通过按返回键返回导航的列表。这就是我构建包装器的原因,它应该交换 fragment 。

这是我的代码:

包装 fragment :

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。

你们能帮帮我吗?

谢谢!

P.S.: 我正在使用支持库

最佳答案

那是因为back到的是上一个Activity不是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();
}

关于android - 在 fragment 中处理 onBackPressed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33143296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com