如何避免使用ViewBinding时出现Missing required view with ID: xxx 错误

2,614 阅读1分钟


问题导入


问题描述 Android Studio版本:3.6.3 我们知道,AS在3.6版本是引入了ViewBinding功能,具体功法此处不赘述。 有时候在导入第三方使用了ViewBinding功能的项目时,会发现点击某些页面崩溃,并报如上错误。

原因分析 

出现这种现象的原因一般是我们项目中使用了include布局,导致include布局中的id不能被识别。

  <include
          android:id="@+id/title"
          layout="@layout/title_base">
  </include> 

title_base文件的布局格式如下:

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
  	  ......
  </LinearLayout>

解决方案 

  1. 去除include标签的id,比如去掉android:id="@+id/title";
  2. 使用merge标签;比如把title_base文件中的LinearLayout用merge替换;
  3. 使用bind将include所包含的布局引入进来;比如定义:

  private ActivityMainBinding binding;
  private TitleBaseBinding titleBaseBinding;
  @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          binding = ActivityMainBinding.inflate(getLayoutInflater());
          setContentView(binding.getRoot());
          titleBaseBinding = TitleBaseBinding.bind(binding.getRoot());

    }


使用titleBaseBinding即可获取inlcude布局中的控件。

其它解决方案

有消息说AS 4.0中已经解决了此问题。