Android双导航图下同名异包Fragment跳转出现Missing required view异常求助
问题根因
- 第一个导航图(dashboard_nav_graph)的跳转配置完全写反
你配置的两个action的目的地和action语义完全不匹配:
- id为
action_dashboardFragment_to_equityFragment的action,实际指向的是dashboardCashDistributionFragment - id为
action_dashboardFragment_to_cashDistributionFragment的action,实际指向的是dashboardEquityFragment
这会导致你调用跳转逻辑时,实际打开的是目标相反的Fragment,自然会出现控件ID找不到的异常。
- 重名布局资源覆盖
Android应用的资源文件是全局唯一的,不会按Java/Kotlin包名区分。你两个不同业务模块下的EquityFragment、CashDistributionFragment,使用的布局文件名完全一致(都叫equity_fragment、cash_distribution_fragment),编译时后打包的模块会覆盖先打包模块的同命名布局,导致其中一个模块的Fragment加载到错误的布局,找不到对应ID的控件。
解决方案
- 修正第一个导航图的错误配置,将两个action的destination替换为正确的目标:
<action android:id="@+id/action_dashboardFragment_to_equityFragment" app:destination="@id/dashboardEquityFragment" /> <action android:id="@+id/action_dashboardFragment_to_cashDistributionFragment" app:destination="@id/dashboardCashDistributionFragment" />
- 给不同模块的布局文件加上模块前缀避免重名:
- dashboard模块的布局重命名为
dashboard_equity_fragment.xml、dashboard_cash_distribution_fragment.xml - more模块的布局重命名为
more_equity_fragment.xml、more_cash_distribution_fragment.xml
重命名完成后,同步修改导航图中对应fragment节点的tools:layout属性,以及Fragment类中onCreateView加载的布局文件名。
- dashboard模块的布局重命名为
- 清理项目缓存后重新编译:执行Android Studio的Build -> Clean Project,再执行Rebuild Project,清除之前生成的错误Binding类缓存。
内容的提问来源于stack exchange,提问作者WISHY
相关产品推荐
相关产品推荐

