我无法理解自己的一生,为什么在启动,暂停并恢复应用程序后,有时我的片段变得无法控制。

我持有对我的片段的引用,如下所示:

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实例,其中一个实例处于某种奇怪的分离状态。

...

您可能应该花更多的时间研究有关“片段/活动”关系以及如何避免此类情况的基础知识。

09-27 00:22