我有一个MainActivity类(扩展AppCompatActivity)。在这个类中创建了一个NavDrawerFragment(extends Fragment)mNavigationDrawerFragment。
然后有一个WpFragment,它是在选择mNavigationDrawerFragment的一个选项时启动的。这个WpFragment启动AsyncTask WpGetTask。在单击事件上,片段启动WpDetailActivity。在特殊情况下,WpGetTask启动WpDetailActivity。
如果我现在在WpDetailActivity中选择主页符号,则应该发生主活动的mNavigationDrawerFragment()。openDrawer()。我通过使用静态类并在那里保存mNavigationDrawerFragment来尝试它,这对我有用,但是当从WpDetailActivity引用静态类的mNavigationDrawerFragment时,另一个用户获得NullPointerException。
从WpDetailActivity调用MainActivity的mNavigationDrawerFragment有哪些不同的方式?
答案 0 :(得分:1)
您不应该假设Fragment
或Activity
中的数据会持续时间超过可见数据 - 它们不会被设计为持久存在。 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()方法,希望这对您有所帮助。