gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:46:06 25 4
gpt4 key购买 nike

我试图从我的 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引用

我也试过这样做:

Activity activity = getActivity();
if (activity instanceof HomeActivity) {
HomeActivity myactivity = (HomeActivity) activity;
selectedWorkout = myactivity.getSelectedWorkout();
}

但是,那根本行不通。

我将如何获得这个值?

最佳答案

首先,您的代码崩溃是因为 Fragment 没有附加到 Activity。所以一个快速的解决方法是像这样添加一个空检查:

Activity activity = getActivity();
if (activity != null && activity instanceof HomeActivity) {
HomeActivity myactivity = (HomeActivity) activity;
selectedWorkout = myactivity.getSelectedWorkout();
}

也就是说,像这样访问 Activity 并不是一个好的做法,因为它会将 Fragment 与特定的 Activity 结合在一起。有几种更好的方法来处理它,例如:

方法一:Activity 实现类似 SelectedWorkoutProvider 的接口(interface),将 getSelectedWorkout() 方法移到那里并转换为接口(interface),而不是 HomeActivity

方法二:通过参数将选定的锻炼传递给 Fragment,如下所示:

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 的文档 here

关于java - 在未附加到 Activity 的 Fragment 中调用 Activity 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51387373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com