[英]Referencing an activity's property from another activity
我有一个类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可能“安全终止其进程”。 这不是必须的,这是可能的。 这意味着,对于稳定的应用程序,您应该确保它确实会发生并相应地进行计划。
我不知道如何重新生成您的special
也不知道您的代码。 因此很难弄清楚这个问题。
关于您的情况,我的理解是:您需要从WpDetailActivity打开抽屉,对吗? 如果是这样,我建议您使用eventbus ,向MainActivity发送和eventbus通知,并调用抽屉片段的openDrawer()方法,希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.