1

我不能为我的生活弄清楚为什么有时我的应用程序启动,暂停和恢复后,我的碎片变得无法控制。ViewPager应用程序在后台时碎片被破坏?

我抱到我的片段引用这样的:

public class MainActivity ... { 

    public static AccountFragment accountFragment; 
    .... 

    @Override 
    protected void onCreate(... { 

     accountFragment = new AccountFragment(this); 
     ... 
    } 

我有一个微调自定义工具栏在理论上应该允许用户造成的AsyncTask在AccountFragment运行。实现此方法,像这样:

if (accountFragment.getView() != null) { 

    accountFragment.load() 
} 

然后创建一个ViewPager,一个FragmentPagerAdapter等

这工作完全罚款的大部分时间。用户可以在Spinner中选择一个新项目,AccountFragment会相应更新。但是,有时在应用程序停止并稍后恢复后,AccountFragment完全不会响应任何内容。甚至应该影响帐户片段的其他视图也没用。这对我来说没有任何意义,因为AccountFragment的视图不能为null,并且由accountFragment.load()执行的AsyncTask对onPreExecute中的UI进行了一些非常简单的更改,这应该非常明显(例如,Everything消失并显示ProgressBar )这根本就没有发生。

任何想法?

回答

1

没有足够的代码来确切知道这里出了什么问题,但也有一些你做错了的东西。

1)不要在public static字段中存储片段引用。最多只能使用privateprotected。阅读基本的Java手册以获得解释。

2)不要超载Fragment的构造函数,它的设计令人沮丧。如果您需要传递一些值,请使用参数进行操作。

3)我猜你在执行onCreate()方法的过程中,如果正在重新创建或新创建,你不会执行检查。你可能会得到两个AccountFragment的实例,其中一个实例处于一个奇怪的分离状态。

...

你或许应该花更多的时间研究有关片段/活动的关系,以及如何避免这样的情况基本知识。

+0

感谢您的全面回答! 1:好的,我会这样做的。 2:我的片段需要以某种方式参考我的MainActivity。那该怎么办呢? 3:如果onCreate正在重新创建或正在创建,我将如何判断?如果我发现它正在被重新创建,我会做些什么改变? – zholmes1 2014-10-22 17:03:50

+0

你的片段有getActivity()方法。您可以将返回的活动转换为MainActivity。关于娱乐:如果onCreate()方法中的savedInstanceState为空,那么通常意味着该Activity是新创建的。如果它不为空,则重新创建。 – 2014-10-22 17:30:09

+0

你是否认为可能围绕我的实例化我的片段与以下如果块可能工作?if(savedInstanceState == null){//实例化片段} – zholmes1 2014-10-24 07:40:51