无法从片段开始活动,得到IllegalArgumentException

问题描述 投票:0回答:3

我尝试从片段开始活动,但出现此错误:

原因: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);
   }

}

代码在片段上出错,但在活动上起作用。

任何人都能帮忙吗?

java android android-activity fragment
3个回答
0
投票

您可以在片段中尝试以下代码,而不是“ 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();

0
投票

如果要从片段中打开活动,则需要使用FragmentActivity

所以只需这样做

 activity?.let { 
        startActivity(Intent(it,MainActivity::class.java))
        it.finish() 
    }

startActivity(Intent(requireActivity(),MainActivity::class.java))
requireActivity().finish()

activity?.let{}requireActivity()均为FragmentActivity


0
投票

尝试不使用第二个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();
}
© www.soinside.com 2019 - 2024. All rights reserved.