mNavigationDrawerFragment

mNavigationDrawerFragment

我有一个类MainActivity(扩展了AppCompatActivity)。在此类中,创建了NavDrawerFragment(扩展片段)mNavigationDrawerFragment。

然后有一个WpFragment,它是从选择mNavigationDrawerFragment的选项之一开始的。此WpFragment启动AsyncTask WpGetTask。在单击事件中,片段将启动WpDetailActivity。在特殊情况下,WpGetTask启动WpDetailActivity。

如果现在在WpDetailActivity中选择主页符号,则应该发生Main Activity的mNavigationDrawerFragment()。openDrawer()。我通过使用静态类并在其中保存mNavigationDrawerFragment进行了尝试,这对我有用,但是当从WpDetailActivity引用静态类的mNavigationDrawerFragment时,另一个用户得到了NullPointerException。

从WpDetailActivity调用MainActivity的mNavigationDrawerFragment有什么不同的方法?

最佳答案

您不应该假设FragmentActivity中的数据的持久时间长于可见时间-它们并非旨在持久化。 Fragment可以访问其附加的Activity变量,但只能在其生命周期内以及仅在将其附加到该Activity时访问。

如果要跨Activity访问数据,则应该在Intent中传递数据,或者使用数据存储区(例如SharedPreferences)。

您还可以使用其他选项,但实际上,问题是一旦用户看不见Activity,Android可能会销毁它并在需要时重新创建它。这就是为什么当您尝试访问Activity中的静态(或非静态)类/方法/变量时有时会获得NPE的原因。

编辑:

阅读活动的“流程生命周期”:

http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle

“#3”明确指出Android可能“安全终止其进程”。这不是必须的,这是可能的。这意味着,对于稳定的应用程序,您应该确保它确实会发生并相应地进行计划。

09-26 17:03