gpt4 book ai didi

Android后退按钮从后台带来错误的 fragment

转载 作者:行者123 更新时间:2023-11-29 15:18:42 27 4
gpt4 key购买 nike

我正在编写一个使用 FrameLayoutFragments 作为其组件的 android 应用程序。

我有 3 个 fragment :CommunityFragmentTaskFormFragmentTaskFragment

在 CommunityFragment 中,用户按下按钮创建任务。然后 TaskFromFragment 替换为 FrameLayout 中的 CommunityFragment with addToBackStack。因为在那之后,我想用后退按钮返回到 CommunityFragment。

在 TaskFormFragment 中,用户按下创建按钮来创建任务。然后 TaskFragment 打开时没有 addToBackStack 因为我不想在按下后退按钮时显示 TaskFormFragment。

他们都工作完美。当我在 TaskFragment 中按下后退按钮时,会显示 CommunityFragment。但是,在那之后,如果我打开 TaskFormFragment 并按下后退按钮,它不会显示 CommunityFragment!相反,它会打开 TaskFragment。

这怎么会发生?这是我的 fragment 转换代码:

CommunityFragmentTaskFormFragment:

TaskFormFragment newFragment = new TaskFormFragment();
Bundle args = new Bundle();
args.putLong("taskTypeId", taskTypeId);
args.putLong("communityId", community.getId());
newFragment.setArguments(args);

FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.frame_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();

TaskFormFragmentTaskFragment:

TaskFragment newFragment = new TaskFragment();
Bundle args = new Bundle();
args.putLong("taskId", task.getId());
newFragment.setArguments(args);

FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.frame_container, newFragment);
transaction.commit();

编辑: 我在这个条目中找到了解决方案:Problems with Android Fragment back stack

最佳答案

我在另一篇文章中找到了解决方案。我已将该方法添加到包含 FrameLayout 的 Activity 类中:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
this.finish();
return false;
} else {
getSupportFragmentManager().popBackStack();
removeCurrentFragment();
return false;
}
}

return super.onKeyDown(keyCode, event);
}


public void removeCurrentFragment() {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment currentFrag = getSupportFragmentManager().findFragmentById(R.id.detailFragment);

if (currentFrag != null)
transaction.remove(currentFrag);

transaction.commit();
}

这个问题的描述和解决方法在这里: Problems with Android Fragment back stack

关于Android后退按钮从后台带来错误的 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20983725/

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