This is onViewCreated of My Fragment:
@Override
public void onViewCreated(@NonNull View view, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
NavHostFragment navHostFragment = (NavHostFragment) requireActivity().getSupportFragmentManager().findFragmentById(R.id.container);
binding.button.setOnClickListener(v -> {
if (navHostFragment != null) {
NavController navController0 = navHostFragment.getNavController();
navController0.navigate(MyFragmentDirections.actionMyFragmentToMessageDialog(
false,
R.drawable.ic_success,
"My Message 1",
R.string.yes,
R.string.no,
R.drawable.circle_yellow
));
}
});
if (navHostFragment != null) {
NavController navController1 = navHostFragment.getNavController();
NavBackStackEntry navBackStackEntry = navController1.getCurrentBackStackEntry();
if (navBackStackEntry != null) {
SavedStateHandle savedStateHandle = navBackStackEntry.getSavedStateHandle();
MutableLiveData<String> liveData = savedStateHandle.getLiveData(Const.DIALOG_BTN_DATA);
liveData.observe(getViewLifecycleOwner(), btnData -> {
// savedStateHandle.remove(Const.DIALOG_BTN_DATA);
if (btnData.equals("btn_right")) {
Log.i(TAG, "Dialog Btn Clicked -----> btn_right");
NavController navController2 = navHostFragment.getNavController();
navController2.navigate(MyFragmentDirections.actionMyFragmentToMessageDialog(
false,
R.drawable.ic_success,
"My Message 2",
R.string.yes,
R.string.no,
R.drawable.circle_red
));
} else {
// Do Some Stuff
}
});
}
}
}
And this is the button onClickListener of Dialog:
binding.btnRight.setOnClickListener(v -> {
NavHostFragment navHostFragment = (NavHostFragment) requireActivity().getSupportFragmentManager().findFragmentById(R.id.container);
if (navHostFragment != null) {
NavController navController = navHostFragment.getNavController();
NavBackStackEntry navBackStackEntry = navController.getPreviousBackStackEntry();
if (navBackStackEntry != null) {
SavedStateHandle savedStateHandle = navBackStackEntry.getSavedStateHandle();
savedStateHandle.set(Const.DIALOG_BTN_DATA, "btn_right");
}
navController.navigateUp();
}
});
I need to show DialogFragment when another DialogFragment result received, but app crashes in statement navController2.navigate(MyFragmentDirections.actionMyFragmentToMessageDialog... and I get the below error:
java.lang.IllegalArgumentException: Navigation action/destination com.example.app:id/action_myFragment_to_messageDialog cannot be found from the current destination
I don't know what NavController to use.
from Show DialogFragment in navBackStackEntry observer result of another DialogFragment using NavigationComponent
No comments:
Post a Comment