项目场景:
通过Navigation导航来实现页面跳转,一个fragment在结束时出现一个弹窗,点击弹窗中的某个按键跳转到另一个fragment出错。
问题描述
java.lang.IllegalStateException: View androidx.appcompat.widget.AppCompatImageView{433e587 VFED..C.. ......ID 294,672-609,869 #7f080148 app:id/goToRest} does not have a NavController set
at androidx.navigation.Navigation.findNavController(Navigation.java:84)
at com.lzt.school.practiceLevel.PracticeLevel1$2.onClick(PracticeLevel1.java:179)
Dialog dialog = new Dialog(getActivity()); dialog.setContentView(ResId); dialog.show(); dialog.getWindow().setGravity(Gravity.DISPLAY_CLIP_HORIZONTAL); dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); ImageView goToRest= dialog.findViewById(R.id.goToRest); //跳转错误一: goToRest.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { NavController navController= Navigation.findNavController(getView()); navController.navigate(R.id.action_practiceLevel1_to_charpterOneStudy); } }); //跳转错误二: goToRest.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); NavController navController= Navigation.findNavController(v); navController.navigate(R.id.action_practiceLevel1_to_charpterOneStudy); } });
原因分析:
第一个点击按键跳转错误为 View androidx.appcompat.widget.AppCompatImageView does not have a NavController set,这已经说了,就是你所点击的按键所在的fragment找不到NavController,找不到原因很简单,就是我的dialog视图覆盖掉了下面的fragment里的View,所以即使你getView还是会出错。
例如:Handler 发送消息有两种方式,分别是 Handler.obtainMessage()和 Handler.sendMessage(),其中 obtainMessage 方式当数据量过大时,由于 MessageQuene 大小也有限,所以当 message 处理不及时时,会造成先传的数据被覆盖,进而导致数据丢失。
解决方案:
提示:这里填写该问题的具体解决方案:
先 调用 dialog.dismiss()结束dialog弹窗,然后再 NavController navController= Navigation.findNavController(getView())获取导航控制器。
goToRest.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); NavController navController= Navigation.findNavController(getView()); navController.navigate(R.id.action_practiceLevel1_to_charpterOneStudy); } });
文章描述了一个在使用Navigation进行页面跳转时遇到的问题,当从Dialog中的ImageView点击跳转至另一个Fragment时,出现java.lang.IllegalStateException,因为Dialog覆盖了底层Fragment的View,导致找不到NavController。解决方案是先关闭Dialog,然后获取NavController进行导航操作。

2582

被折叠的 条评论
为什么被折叠?



