繁体   English   中英

从另一个活动引用一个活动的属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM