- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果您在 XML 布局文件中声明了一些 Fragment
,那么 SetRetainInstance
看起来可以正常工作。
但是,如果在主 Activity
的 OnCreate
回调中将 Fragment
动态加载到某个容器中会怎样?在这种情况下,我看不出 setRetainInstance
的含义或功能。
检查这段代码:
protected override void OnCreate(Bundle bundle) {
base.OnCreate(bundle);
var f = new SomeFragment();
var ft = FragmentManager.BeginTransaction();
ft.Replace(Android.Resource.Id.Content, f);
ft.Commit();
}
可以看到每次OnCreate
被调用时(比如屏幕旋转时),都会创建一个新的SomeFragment
并填充Activity的主要内容。
现在即使我声明一个变量(字段)持有对 fragment 实例的引用并仅在它为 null 时创建它,如下所示:
SomeFragment f;
protected override void OnCreate(Bundle bundle) {
base.OnCreate(bundle);
if(f == null) {
f = new SomeFragment(this);
f.RetainInstance = true;
}
var ft = FragmentManager.BeginTransaction();
ft.Replace(Android.Resource.Id.Content, f);
ft.Commit();
}
这也不行,每次创建Activity时,字段f
最初还是null(不保留)。我发现在这里工作的唯一解决方案是将字段 f
声明为静态,如下所示:
static SomeFragment f;
有了它,我什至不需要使用 RetainInstance
(或 Java 中的 setRetainInstance
)。事实上,动态加载 Fragments 的需求非常流行,所以在这一点上 RetainInstance
似乎没那么有用?
或者我错过了一些简单的东西来继续利用 RetainInstance
?问题是使用RetainInstance
和动态加载Fragments,如果你有一些解决方案或模式可以在这里使用,请与我分享,谢谢!
最佳答案
虽然我对 Xamarin 不熟悉,但我可以用 Java 回答这个问题。
而不是使用
replace(int containerViewId, Fragment fragment)
你应该使用
replace(int containerViewId, Fragment fragment, String tag)
例如,
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ExampleFragment fragment;
fragment = (ExampleFragment) fragmentManager.findFragmentByTag("tag");
if(fragment == null)
fragment = new ExampleFragment();
fragmentTransaction.replace(R.id.fragment_container, fragment, "tag");
fragmentTransaction.commit();
但是如果您在后台运行较长的任务,您应该只使用 setRetainInstance
。你可以看看 this blog post .更建议重新创建 fragment ,因为它可以避免意外行为(例如,不初始化某些变量)。
关于android - 不了解 setRetainInstance(或 Xamarin Android 中的 RetainInstance)的工作原理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39070517/
我在浏览新的相机 API 时遇到了这个文件: https://github.com/android/camera-samples/blob/master/CameraXBasic/app/src/ma
我有简单的 Activity,没有 fragment 。 我需要使用 onRetainNonConfigurationInstance。文档说不推荐使用 Fragment setRetainInsta
我有一个包含 fragment 的布局: 我在这个 fragment 的 onCreate 方法中使用 setRetainInstance(true) 设置这个: publi
如果您在 XML 布局文件中声明了一些 Fragment,那么 SetRetainInstance 看起来可以正常工作。 但是,如果在主 Activity 的 OnCreate 回调中将 Fragme
我是一名优秀的程序员,十分优秀!