从其他活动引用活动的属性

时间:2015-11-06 19:16:53

标签: java android android-activity

我有一个MainActivity类(扩展AppCompatActivity)。在这个类中创建了一个NavDrawerFragment(extends Fragment)mNavigationDrawerFragment。

然后有一个WpFragment,它是在选择mNavigationDrawerFragment的一个选项时启动的。这个WpFragment启动AsyncTask WpGetTask。在单击事件上,片段启动WpDetailActivity。在特殊情况下,WpGetTask启动WpDetailActivity。

如果我现在在WpDetailActivity中选择主页符号,则应该发生主活动的mNavigationDrawerFragment()。openDrawer()。我通过使用静态类并在那里保存mNavigationDrawerFragment来尝试它,这对我有用,但是当从WpDetailActivity引用静态类的mNavigationDrawerFragment时,另一个用户获得NullPointerException。

从WpDetailActivity调用MainActivity的mNavigationDrawerFragment有哪些不同的方式?

2 个答案:

答案 0 :(得分:1)

您不应该假设FragmentActivity中的数据会持续时间超过可见数据 - 它们不会被设计为持久存在。 Fragment可以访问附加到的Activity个变量,但仅限于其生命周期,并且仅在附加到Activity时。

如果您希望在Activity之间访问数据,那么您应该在Intent中传递数据,或者使用数据存储(例如SharedPreferences)。

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

编辑:

阅读"流程生命周期"活动:

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

"#3"明确指出Android可能会安全地杀死它的进程。"这不是必要条件,这是一种可能性。这意味着,对于稳定的应用程序,您应该确定它确实发生并相应地进行计划。

答案 1 :(得分:0)

我不知道如何重新制作你的special,也不知道你的代码。所以很难解决这个问题。

关于你的情况,我的理解是:你需要从WpDetailActivity打开抽屉吗?如果是这样,我建议您使用eventbus,发送和发送事件总线通知MainActivity并调用drawerFragment的openDrawer()方法,希望这对您有所帮助。