我无法理解自己的一生,为什么在启动,暂停并恢复应用程序后,有时我的片段变得无法控制。
我持有对我的片段的引用,如下所示:
public class MainActivity ... {
public static AccountFragment accountFragment;
....
@Override
protected void onCreate( ... {
accountFragment = new AccountFragment(this);
...
}
我有一个带有Spinner的自定义工具栏,从理论上讲,该工具栏应允许用户在AccountFragment中运行AsyncTask。这样实现:
if (accountFragment.getView() != null) {
accountFragment.load()
}
然后,我创建一个ViewPager,一个FragmentPagerAdapter等。
在大多数情况下,这完全可以正常工作。用户可以在微调器中选择一个新项目,AccountFragment将相应更新。但是,有时在应用程序停止后又恢复之后,AccountFragment将完全不响应任何内容。即使是应用程序中可能影响AccountFragment的其他视图也无济于事。这对我来说没有意义,因为AccountFragment的视图不能为null,并且由accountFragment.load()执行的AsyncTask在其onPreExecute上对UI进行了一些非常简单的更改,这应该非常明显(例如,所有内容消失并且出现ProgressBar ),这根本没有发生。
有任何想法吗?
最佳答案
没有足够的代码来确切了解这里出了什么问题,但是还有很多事情在做错。
1)不要将片段引用存储在public static
字段中。将其设置为private
或最多protected
。阅读基本Java手册以获取解释。
2)不要重载Fragment的构造函数,这是设计所不鼓励的。如果需要向其传递一些值,请使用参数来实现。
3)我想您是不是在重新创建或重新创建Activity的onCreate()
方法期间执行检查。您可能最终得到两个AccountFragment
实例,其中一个实例处于某种奇怪的分离状态。
...
您可能应该花更多的时间研究有关“片段/活动”关系以及如何避免此类情况的基础知识。