我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情
问题描述
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>
解决方案
- 去除include标签的id,比如去掉android:id="@+id/title";
- 使用merge标签;比如把title_base文件中的LinearLayout用merge替换;
- 使用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中已经解决了此问题。