以下是我的Fragment的onViewCreated
方法:
@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
}
});
}
}
}
这是对话框的 onClickListener
按钮:
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();
}
});
我需要在接收到另一个DialogFragment的结果时显示DialogFragment,但是在语句navController2.navigate(MyFragmentDirections.actionMyFragmentToMessageDialog...
中应用程序崩溃,并出现以下错误:
java.lang.IllegalArgumentException: Navigation action/destination com.example.app:id/action_myFragment_to_messageDialog cannot be found from the current destination
有人可以帮我解决这个问题吗?我需要在使用NavigationComponent时,在navBackStackEntry观察器中展示另一个DialogFragment的结果,并显示DialogFragment。