gpt4 book ai didi

android - 清除 fragment 堆栈以转到另一个单独的 fragment

转载 作者:搜寻专家 更新时间:2023-11-01 08:33:43 26 4
gpt4 key购买 nike

我一遍又一遍地打开包含列表的 fragments,然后,最终,我想清除 fragment 堆栈以打开一个新的 Fragment 一旦我到达那些包含列表的 fragment 的末尾。

我不知道我是否清楚,所以这是我目前正在做的事情:

private final BroadcastReceiver onReceiveLaunchIncident = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
// Select the correct item from the DrawerLayout
selectItem(drawerList.indexOf("Patrol"));

}
};

目前,当我输入我的 BroadcastReceiver

时,它是这样的

fragment D ---> fragment A ---> fragment E

我希望它是这样的:

fragment D ---> fragment E

enter image description here

private void selectItem(final int position) {
addToDrawerIfNotExist(position);

if (mDrawerListChild.getCheckedItemPosition() == position) {
Log.i(TAG, "Same position selected in drawer");
}

mDrawerListChild.setItemChecked(position, true);
mDrawerLayout.closeDrawer(mDrawerLinear);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.fade_in, R.anim.fade_out, R.anim.fade_in, R.anim.fade_out);
BackHandledFragment fragment = fragmentListString.get(fragmentList.get(position));

ft.replace(R.id.content_frame, fragment, fragment.getTagText())
.commitAllowingStateLoss();
}
}, 300);
}

最佳答案

由于您添加第一个 fragment 的方式,您遇到了这个问题。如果您将后台堆栈视为交易记录而不是 fragment 本身,您就会明白为什么总是留下 fragment A。当您添加 fragment A 时,我猜您并没有将第一个交易设置为包含在后栈。如果是这种情况,您在堆栈中的第一个条目是从 A 到 B 的更改,当您执行上面的 pop 代码时,该更改将被撤消。您的问题应该通过使用 addToBackStack 将第一个条目添加到后台堆栈来解决。交易过程中调用。

下面的代码示例使用事务替换,这将允许您仍然不按照上面的建议将 fragment A 添加到返回堆栈。替换调用不包含在返回堆栈中,因此只会将 fragment A 替换为 E,同时将返回堆栈留空。

编辑

private void selectItem(final int position) {
addToDrawerIfNotExist(position);

if (mDrawerListChild.getCheckedItemPosition() == position) {
Log.i(TAG, "Same position selected in drawer");
}

mDrawerListChild.setItemChecked(position, true);
mDrawerLayout.closeDrawer(mDrawerLinear);

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
BackHandledFragment fragment = fragmentListString.get(fragmentList.get(position));

ft.replace(R.id.content_frame, fragment, fragment.getTagText()).commit();
}

编辑 2: 删除了淡入淡出动画,因为这会导致闪烁,您会在过渡到 fragment E 之前的一瞬间看到 fragment A。

关于android - 清除 fragment 堆栈以转到另一个单独的 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38404888/

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