gpt4 book ai didi

android - fragment 不会从后台弹出?

转载 作者:行者123 更新时间:2023-11-29 01:05:58 26 4
gpt4 key购买 nike

我有三个 fragment A、B和C

enter image description here这是路径:A -> B -> C:ABBC

当我从 fragment C 返回时,我想转到 fragment A。

  • A <- C : C 回到根 fragment A
  • A <- B : B 回到根 fragment A

但我的问题是当我在 fragment C 中按下时,我得到了这个行为:似乎 fragment C 没有从后台清除:enter image description here

至于我的代码,这是 replaceFragment 的方法:

public void replaceFragment(Fragment fragment, boolean withBackStack) {
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
String fragmentTag = fragment.getClass().getName();
fragmentTransaction.replace(R.id.frame, fragment, fragmentTag);
if (withBackStack)
fragmentTransaction.addToBackStack(fragmentTag);
try {
fragmentTransaction.commitAllowingStateLoss();
} catch (IllegalStateException ex) {
ex.printStackTrace();
}
}

首先我在 MainActivity 中调用了 replaceFragment(new AFragment(), false); ,然后在我点击进入时在 Fragment A 中调用了按钮,我调用了 mListener.replaceFragment(new BFragment(), true); 最后,在 Fragment B 中,当我点击按钮时,我调用了 mListener.replaceFragment(new CFragment(), false);

有人对此行为有解释吗?当我单击 backpressed 时,不应清除最后一个 fragment C 吗?

Here ,你会发现整个例子。提前致谢!

最佳答案

由于当 backpressed 不会弹出存储的事务时,您没有将 fragC 添加到后台堆栈,因此它不会被删除。相反,您必须在此处通过覆盖 backpress 来删除 fragment 。Overiride backpress 并检查 fragC 并将其删除,然后调用pospstack 弹出存储的事务。

还将 fragment 的实例存储为全局以检查 fragment 是否为 fragC。

private Fragment mFragment;

在你的方法中存储实例

@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
Fragment fragment = getSupportFragmentManager().findFragmentByTag(mFragment.getClass().getName());
if (fragment != null && fragment.getClass().getName().equalsIgnoreCase(CFragment.class.getName())) {
getSupportFragmentManager().beginTransaction().remove(mFragment).commit();
}
getSupportFragmentManager().popBackStackImmediate();
} else {
super.onBackPressed();
}
}

关于android - fragment 不会从后台弹出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47219023/

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