前一段时间偶尔看到butterknife的大佬已经不更新butterknife库,当时心里可慌了就想着,这个该怎么办,但是细看butterknife大佬建议使用使用ViewBinding就去使用研究了下这个库,感觉这个库还是非常好,就想着直接把项目中的butterknife直接替换掉:
首先我们我们在项目中引入ViewBinding,但是使用ViewBinding我们的Android Studio必须升级到3.6及其以上,3.6以下是不支持viewBinding的引入的:
引入viewBinding首先在项目中的build.gradle中添加viewBinding:
添加上viewBinding后build一下项目:
下面是我们在项目中怎么中的BaseActivity中添加:
这个就是viewBinding怎么在Baseview中添加的:
getBinding中代码如下:
protected T getBinding() {
try {
Type superClass = getClass().getGenericSuperclass();
Type type = ((ParameterizedType) superClass).getActualTypeArguments()[0];
Class clazz = ClassUtils.getRawType(type);
Method method = clazz.getMethod("inflate", LayoutInflater.class);
return (T) method.invoke(null, getLayoutInflater());
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
其中的工具类如下:
public class ClassUtils {
public static ClassgetRawType(Type type) {
if (typeinstanceof Class) {
return (Class) type;
}else if (typeinstanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) type;
Type rawType = parameterizedType.getRawType();
return (Class) rawType;
}else if (typeinstanceof GenericArrayType) {
Type componentType = ((GenericArrayType) type).getGenericComponentType();
return Array.newInstance(getRawType(componentType), 0).getClass();
}else if (typeinstanceof TypeVariable) {
return Object.class;
}else if (typeinstanceof WildcardType) {
return getRawType(((WildcardType) type).getUpperBounds()[0]);
}else {
String className = type ==null ?"null" : type.getClass().getName();
throw new IllegalArgumentException("Expected a Class, ParameterizedType, or GenericArrayType, but <" + type +"> is of type " + className);
}
}
}
上面就是工具类,
在Activity中的使用如下:
在项目中添加相应的布局就可使用;
下面就是使用ViewBingding的使用:
这样就可以直接使用viewBinding: