每次显示时,我都试图boolean
在Fragment
类中使用a做某事Fragment
。
我的应用程序启动,打开FirstFragment
和boolean
首次永远true
,那么我有一个if
条款,检查它的价值:
if (FirstTime) {
FirstTime = false;
} else {
// Other stuff here, cause it's not true.
}
然后,在第一次的时候FirstTime
是true
,我做的东西一样去到另一个Fragment
。当我回到自己的Fragment1
身体上时onCreate()
,我也会这样做。总是true
似乎令人耳目一新。
然后,我认为这可能是问题Fragment
,并且每次我按时Fragment1
,它都会重新启动或发生某种情况。然后,我在我的容器中添加了一个吸气剂和吸气剂MainActivity
:
public Boolean getFirstTime() {
return FirstTime;
}
public void setFirstTime(Boolean FirstTime) {
this.FirstTime = FirstTime;
}
从开始就在哪里,然后我将代码从Fragment1
for 更改为:
if (((MainActivity) getActivity()).getFirstTime())
((MainActivity) getActivity()).setFirstTime(false);
} else {
// Other stuff here, cause it's not true,
}
但是,这仍然是真的。
我做错了什么还是我对片段的误解?
有什么办法吗?
您已假设Fragment
只要该应用程序仍在运行,该实例将一直存在。这是一个合理的假设,如果这个假设是正确的,那么您的方法将会很好地工作。
不幸的是,Fragment
当a
退回到后台时会被销毁,而在返回到前景时会重新创建。这就是为什么它看起来“刷新”的原因。并非如此Activity
。当Activity
后退到后台时,不会立即销毁它。而是将其在当前任务的后堆栈上保留一段时间,如果返回到前台,则它是
同一 实例。
为了解决这个问题,有四种不同的方法:
FirstTime
为static
。这 应该 工作。我以前用过。但是,仅在绝对有必要保留成员字段的值的极端情况下,并且仅当没有其他方法可用时,才应使用此方法。生成变量static
会导致经典的内存泄漏。FirstTime
在您的Fragment
使用onSaveInstanceState()
:@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(“FirstTime”, FirstTime);
}
并在中检索值onCreate()
:
@Override
public void onCreate (Bundle savedInstanceState){
super.onCreate();
FirstTime = savedInstanceState.getBoolean("FirstTime");
}
声明FirstTime
一个全局常量类,而不是将其放在Fragment
:
public class GlobalConstants{
public static boolean FirstTime = true;
// other global constants ...
}
并以如下方式访问它Fragment
:
if (GlobalConstants.FirstTime) {
GlobalConstants.FirstTime = false;
} else {
//Other stuff here cause it's not true
}
FirstTime
中SharedPreference
:SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putBoolean(“FirstTime”, FirstTime);
editor.commit();
并以这种方式获取其值:
SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
FirstTime = sp.getBoolean("FirstTime", true);
前三个方法将FirstTime
在应用程序运行时保持值。第四种方法将保留FirstTime
超出应用程序生存期的值,即,当应用程序重新启动时,FirstTime
将是true
或false
取决于应用程序退出前最后设置的值。
参考文献:
1.
处理片段生命周期
。
2. 保存键值集 。
3. 可见性和生命周期 。
编辑:
要了解使用方法onSaveInstanceState()
,请参见以下链接:
1. 保存(和检索)Android实例状态 。
2.
一劳永逸,如何正确保存Fragments的实例状态 。
3. 处理配置更改 。
这 很 令人困惑,但是一旦您理解它就会对您有用。
我有一个HomeActivity,我从中调用片段列表。在HomeActivity中,我有一个侧菜单,其中加载了所有片段。 现在,在这个列表中,我有一个名为HomeFraank的片段,它使用webservice显示带有数据的Google地图。 我想要的是我想加载Map dat只加载一次(第一次)片段,而不是每次单击sidemenu或从任何其他片段进来时。 我的HomeFragment或任何其他片段会
本文向大家介绍Android 保存Fragment 切换状态实例代码,包括了Android 保存Fragment 切换状态实例代码的使用技巧和注意事项,需要的朋友参考一下 前言 一般频繁切换Fragment会导致频繁的释放和创建,如果Fragment比较臃肿体验就非常不好了,这里分享一个方法。 正文 一、应用场景 1、不使用ViewPager 2、不能用replace来切换Fragm
我试图理解类中受保护成员的行为。我有一个类,其中包含受保护的整数。 类别: 还有另一个包,它有3个类,和。继承层次结构如下: 第1子类 子课堂 第3子类 在上述代码中,,,,,和工作正常,没有任何可见性问题。但是,,存在可见性问题。 根据JLS§6.6.2.1, 让C是声明受保护成员的类。只允许在C的子类S的主体内进行访问。 此外,如果Id表示实例字段或实例方法,则: 如果访问是通过限定名Q.Id
本文向大家介绍Android 中 Fragment 嵌套 Fragment使用存在的bug附完美解决方案,包括了Android 中 Fragment 嵌套 Fragment使用存在的bug附完美解决方案的使用技巧和注意事项,需要的朋友参考一下 自从Android3.0引入了Fragment之后,使用Activity去嵌套一些Fragment的做法也变得更加流行,这确实是Fragment带来的一些优
我将Vector3参数从外部类传递给方法。然后将其分配到类字段。然后,当我想检查Update方法中的类字段值时,它说它是零。我做错了什么? 这是传递Vector3参数的方法 }
问题1我创建了一个文本字段,如上面的代码所示,并尝试使用TextBox.setValue(“测试值”)设置值;方法,但它给出的错误如下所示: 问题3 为了解决问题#2,我需要将NeedExceptions标志设置为true,如下所示,然后在PDF中正确显示该字段值。但是在这个解决方案之后,一旦用户改变了字段值,我们再次解析这个PDF字段,我就无法提取/解析PDF字段。 注意:-这个问题存在于Ado