gpt4 book ai didi

安卓 fragment 问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:27 25 4
gpt4 key购买 nike

我正在使用 fragment 来表示我的应用程序中的不同 View 。在 View 之间导航时,我使用以下代码替换 fragment :

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right);
ft.replace(R.id.main_linearlayout_fragmentcont, frag);
ft.addToBackStack(null);
ft.commit();

我在旋转和重建 Activity 时遇到了很多问题。我需要支持旧版本的 android,所以 android:configChanges="orientation"不是一个选项。很多问题是由于 Android 保存 Fragment 状态的方式的性质造成的。

这些是我遇到的问题:

1) fragment 转换在旋转后自动恢复时不记得我为弹出事件自定义的动画。但是他们确实记得我的 BackStack。我知道我可以编写自己的后台处理程序,使用动画进行替换并一起摆脱 pop 但我想知道是否有办法在调用 popBackStack() 之前重置动画或让 FragmentManager 记住旋转后自动恢复时的动画。

2) 我遇到的另一个问题是我的一个顶级 fragment View 中有一堆 subview (线性布局),它们包含自己的 fragment 。这些 subview 以编程方式创建和填充。当我的 fragment 在旋转后重新创建时,我以编程方式在 fragment 对象的 onCreateView 中重建 subview ,我最终在每个 subview 下都有重复的 fragment (1 - 我以编程方式创建,1 - Android fragment 从恢复创建)。我假设这是因为我在使用相同的 id 旋转后以编程方式重建 subview 。有没有办法防止 fragment 被恢复? Android 什么时候将 savedState 中的 fragment 注入(inject)到我以编程方式构建的这些 View 中?我该如何防止这种情况发生?

3) 上面的替换代码似乎为我的 fragment (Fragment) 对象多次触发 onCreateView。这是没有旋转的,当我只运行上面的代码一次时就会发生。是否有理由使用上述代码多次调用 Fragment 的 onCreateView?

关于 fragment 的问题: 1)我可以防止Android在重构 Activity 时自动恢复 fragment 吗?我该怎么做?是根据LinearLayout的ID吗?我可以调用包含 fragment onStop 的 LinearLayout 的 removeAllViews 吗?这样保存时 View 不存在?

2) 有没有办法将 Fragment 添加到我有引用但没有 ID 的 LinearLayout? fragment 添加、替换 API 似乎需要一个 int ID。

谢谢!

最佳答案

1) 如果你知道怎么告诉我,我也很生气

2) 您可能在顶级 fragment 内的 FragmentTransaction 上调用 add,但恢复操作也在添加,所以重复!选项 1. 使用 replace 代替。选项 2.(首选)检查 if(savedInstances==null) {//执行事务 } else {//让系统自行重建

3) 如果您要更改作为 fragment 一部分的 View 的布局(通过调用添加或替换),管理器会调用该方法再次创建 View 。我仍然不确定这是一个错误还是一个功能,如果它是一个功能,为什么它是。如果你发现了请告诉我

1)(应该是 4,不是吗?)不要弄乱布局,如果您想删除,请使用 while(popBackStackImmediatly){} 删除它们,但如果您更深入并了解系统在做什么,通常没有理由不让它自动完成。

2)(应该是 5,不是吗?)如果您有引用,您的 ID 为 View.getId()

编码愉快!

关于安卓 fragment 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14263730/

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