gpt4 book ai didi

android - FragmentTransaction 替换方法无法正常工作

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

我在替换 FrameLayout 容器内的 fragment 时遇到了错误。当应用程序第一次启动时一切正常,但是当我隐藏应用程序然后恢复它时,当调用 FragmentTransaction.replace 方法时, fragment 开始相互重叠

我见过几乎所有关于此类问题的 stackoverflow 问题,但我无法解决此问题

代码:

<FrameLayout
android:id="@+id/frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>

添加初始 fragment :

getSupportFragmentManager().beginTransaction()
.add(R.id.frame, RequestFragment.newInstance(), REQUEST_FRAGMENT_TAG)
.commit();

替换:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
switch (menuItem.getItemId()) {
case R.id.request:
ft.replace(R.id.frame, RequestFragment.newInstance(), REQUEST_FRAGMENT_TAG);
ft.commit();
return true;
case R.id.finished:
ft.replace(R.id.frame, FinishedFragment.newInstance(), FINISHED_FRAGMENT_TAG);
ft.commit();
return true;
case R.id.questions:
ft.replace(R.id.frame, QuestionsFragment.newInstance(), QUESTIONS_FRAGMENT_TAG);
ft.commit();
return true;
default:
return true;
}

最佳答案

很难说,因为您的代码没有提供关于何时运行的上下文,但我怀疑问题出在您添加初始 fragment 时。

您正在调用 add 而不是 replace ,后者只会将新 fragment 添加到任何现有 fragment 之上。即使容器尚未包含任何内容,也可以使用替换。

fragment 在 FragmentManager 中存活,并在 Activity 重新启动时自动重新附加到它们的容器。正确的步骤是在添加新 fragment 之前检查现有的 Fragment

添加初始 fragment

Fragment f=getSupportFragmentManager().findFragmentById(R.id.frame);

if (f==null) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.frame, RequestFragment.newInstance(), REQUEST_FRAGMENT_TAG).commit();

}

此外,在调试时使用日志记录 getSupportFragmentManager().getFragments().size(); 会很有帮助。它可以让您了解 FragmentManager 中当前有多少 fragment ,并可以突出显示代码中的潜在问题。例如,如果每次旋转设备时计数都会增加,则说明您是在添加 fragment 而不是检查现有 fragment 。

关于android - FragmentTransaction 替换方法无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33953023/

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