我在一个项目中发现了以下代码(变量/类名已更改):
private FragmentParams params;
public static MyFragment newInstance(FragmentParams params) {
MyFragment fragment = new MyFragment();
fragment.params = params; // <- Manually setting params in fragment class
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_fragment, container, false);
ButterKnife.bind(this, view);
/* The following line initializes a class responsible for the user
interface. The params are used for that purpose. However, out of
nowhere, the params where null 2 times.*/
presenter.setParams(params);
return view;
}
该项目已经运行了几个星期,当 presenter
访问参数时报告了一些 NullPointerException
(在代码的后面)。
我知道正确的方法是使用setArguments()
,但是我想问的问题是:尖线会不会有问题?
我唯一能想到的是,Android 出于某种原因重新创建了 fragment ,并且 params
由于方法 newInstance
变成了 null
> 未被调用,因此 params
未设置。
最佳答案
您还可以尝试将 fragment 保留实例状态设置为 true,每当重新创建 Activity 时,它都会将 fragment 的实例保留在 fragment 管理器中。
https://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)
关于android - 可以像这样将参数传递给 fragment 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45454998/