猿问

在未附加到 Activity 的 Fragment 中调用 Activity 方法

我试图从我的 Fragment 中的 HomeActivity 获取一个与 HomeActivity 无关的值。当我使用


selectedWorkout = ((HomeActivity) context).getSelectedWorkout(); 在这种情况下 context = getActivity();


我收到一个错误: java.lang.NullPointerException: Attempt to invoke virtual method 'com.pttrackershared.models.Workout com.pttracker.views.screens.fragments.LandingFragment.getSelectedWorkout()' on a null object reference


我也尝试做这样的事情:


Activity activity = getActivity();

   if (activity instanceof HomeActivity) {

       HomeActivity myactivity = (HomeActivity) activity;

       selectedWorkout = myactivity.getSelectedWorkout();

}

但是,这根本行不通。


我将如何获得这个价值?


白板的微信
浏览 196回答 2
2回答

阿晨1998

首先,您的代码崩溃了,因为Fragment没有附加到Activity. 所以一个快速的解决方法是添加一个像这样的空检查:Activity activity = getActivity();if (activity != null && activity instanceof HomeActivity) {       HomeActivity myactivity = (HomeActivity) activity;       selectedWorkout = myactivity.getSelectedWorkout();}也就是说,Activity像这样访问不是一个好习惯,因为它将 Fragment 与特定的Activity. 有几种更好的方法来处理它,例如:方法一: 使Activity实现成为一个接口SelectedWorkoutProvider,将 getSelectedWorkout() 方法移到那里并强制转换为接口,而不是HomeActivity方法二: 将选定的锻炼传递给Fragmentvia 参数,如下所示:Bundle args = new Bundle();args.putString("selected.workout", getSelectedWorkout());LandingFragment fragment = new LandingFragment();fragment.setArguments(args);然后在Fragment使用中:getArguments().getString("selected.workout");以获得价值。方法三: 使用 将SharedPreferences数据保存Activity在Fragment. 请在此处找到文档SharedPreferences

摇曳的蔷薇

另一种方法是使用 EventBus(或其他类似的库)并在选择锻炼时将事件从活动发送到片段
随时随地看视频慕课网APP

相关分类

Java
我要回答