我有一个类MainActivity(扩展了AppCompatActivity)。在此类中,创建了NavDrawerFragment(扩展片段)mNavigationDrawerFragment。
然后有一个WpFragment,它是从选择mNavigationDrawerFragment的选项之一开始的。此WpFragment启动AsyncTask WpGetTask。在单击事件中,片段将启动WpDetailActivity。在特殊情况下,WpGetTask启动WpDetailActivity。
如果现在在WpDetailActivity中选择主页符号,则应该发生Main Activity的mNavigationDrawerFragment()。openDrawer()。我通过使用静态类并在其中保存mNavigationDrawerFragment进行了尝试,这对我有用,但是当从WpDetailActivity引用静态类的mNavigationDrawerFragment时,另一个用户得到了NullPointerException。
从WpDetailActivity调用MainActivity的mNavigationDrawerFragment有什么不同的方法?
最佳答案
您不应该假设Fragment
或Activity
中的数据的持久时间长于可见时间-它们并非旨在持久化。 Fragment
可以访问其附加的Activity
变量,但只能在其生命周期内以及仅在将其附加到该Activity
时访问。
如果要跨Activity
访问数据,则应该在Intent
中传递数据,或者使用数据存储区(例如SharedPreferences
)。
您还可以使用其他选项,但实际上,问题是一旦用户看不见Activity
,Android可能会销毁它并在需要时重新创建它。这就是为什么当您尝试访问Activity
中的静态(或非静态)类/方法/变量时有时会获得NPE的原因。
编辑:
阅读活动的“流程生命周期”:
http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle
“#3”明确指出Android可能“安全终止其进程”。这不是必须的,这是可能的。这意味着,对于稳定的应用程序,您应该确保它确实会发生并相应地进行计划。