Если вы хотите открыть активность из фрагмента, вам нужно использовать FragmentActivity
, просто сделайте так
binding.loginBtn.setOnClickListener{
activity?.let{
it.startActivity(Intent (it, MainActivity::class.java))
it.finish()
}
}
или
binding.loginBtn.setOnClickListener{
requireActivity().startActivity(Intent(requireActivity(),MainActivity::class.java))
requireActivity().finish()
}
activity?.let{}
и requireActivity()
являются FragmentActivity
Одна вещь, которую я замечаю из вашего сообщения об ошибке:
Указанный параметр ненулевое значение равно null: метод kotlin .jvm.internal.Intrinsics.checkParameterIsNotNull, комплект параметров
, поэтому я бы добавил @Nullable в Bundle saveInstanceState
@Nullable
@Override
public View onCreateView(@NotNull LayoutInflater inflater, ViewGroup container,@Nullable 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();
}
one больше всего вам нужно переключить ваш код следующим образом
@Override
public void onDestroyView() {
sharedViewModel.getIsFetchSmsSuccessful().removeObservers(this);
super.onDestroyView();
}
, потому что вы хотите удалитьObservers, прежде чем он уничтожит представление
Вот как это должно выглядеть в kotlin
class LoginFragment : Fragment() {
private var binding: FragmentLoginBinding? = null
private var sharedViewModel: AuthSharedViewModel? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_login, container, false)
sharedViewModel = (activity as LoginActivity).viewModel
binding.setViewmodel(sharedViewModel)
binding.setLifecycleOwner(this)
return binding.getRoot()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
onClickListener()
}
private fun onClickListener() {
binding.loginBtn.setOnClickListener{
activity?.startActivity(Intent(activity, MainActivity::class.java))
activity?.finish()
}
}
override fun onDestroyView() {
sharedViewModel.getIsFetchSmsSuccessful().removeObservers(this)
super.onDestroyView()
}
}
это Java
public class LoginFragment extends Fragment {
private FragmentLoginBinding binding;
private AuthSharedViewModel sharedViewModel;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_login, container, false);
sharedViewModel = ((LoginActivity) getActivity()).viewModel;
binding.setViewmodel(sharedViewModel);
binding.setLifecycleOwner(this);
return binding.getRoot();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
onClickListener();
}
private void onClickListener() {
binding.loginBtn.setOnClickListener(v -> {
Intent intent = new Intent(getActivity(), MainActivity.class);
startActivity(intent);
});
}
@Override
public void onDestroyView() {
sharedViewModel.getIsFetchSmsSuccessful().removeObservers(this);
super.onDestroyView();
}
}