我尝试从片段开始活动,但出现此错误:
原因:java.lang.IllegalArgumentException:参数指定为非null为null:方法kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数捆绑包
我使用Java,不知道为什么会出现Kotlin错误
这是我的片段:
public class LoginFragment extends Fragment {
private FragmentLoginBinding binding;
private AuthSharedViewModel sharedViewModel;
@Override
public View onCreateView(@NotNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_login, container, false);
sharedViewModel = ((LoginActivity) getActivity()).viewModel;
binding.setViewmodel(sharedViewModel);
binding.setLifecycleOwner(this);
onClickListener();
return binding.getRoot();
}
private void onClickListener() {
binding.loginBtn.setOnClickListener(v -> {
Intent intent = new Intent(getActivity(), MainActivity.class);
startActivity(intent);
});
}
@Override
public void onDestroyView() {
super.onDestroyView();
sharedViewModel.getIsFetchSmsSuccessful().removeObservers(this);
}
}
代码在片段上出错,但在活动上起作用。
任何人都能帮忙吗?
您可以在片段中尝试以下代码,而不是“ getActivity”:
private AppCompatActivity activity;
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
if (context instanceof AppCompatActivity) {
activity = (AppCompatActivity) context;
}
}
然后在您的clickListener中
Intent intent = new Intent(activity, MainActivity.class);
activity.startActivity(intent);
activity.finish();
如果要从片段中打开活动,则需要使用FragmentActivity
所以只需这样做
activity?.let {
startActivity(Intent(it,MainActivity::class.java))
it.finish()
}
或
startActivity(Intent(requireActivity(),MainActivity::class.java))
requireActivity().finish()
activity?.let{}
和requireActivity()
均为FragmentActivity
尝试不使用第二个getActivity()
。方法startActivity()
也存在于Fragment类中。
Intent intent = new Intent(getActivity(), NewActivity.class);
startActivity(intent);
编辑:您可能在活动尚未准备就绪时调用onClickListener。More about the fragment lifecycle.试试这个:
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
onClickListener();
}