参考文档链接:视图绑定 | Android Developers (google.cn)
在模块级 build.gradle
文件添加 viewBinding 配置:
android { ... viewBinding true }
自定义 BaseActivity 类:
package com.lgd.viewbinding;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewbinding.ViewBinding;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
/**
* @Author lgd
* @Date 2024/6/17 14:30
*/
public abstract class BaseActivity<V extends ViewBinding> extends AppCompatActivity {
public V binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Type type = this.getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
// 获得泛型中的实际类型,可能会存在多个类型
Class<V> clazz = (Class<V>) ((ParameterizedType) type).getActualTypeArguments()[0];
try {
// 反射inflate方法
Method inflate = clazz.getMethod("inflate", LayoutInflater.class);
binding = (V)inflate.invoke(null, getLayoutInflater());
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
setContentView(binding.getRoot());
}
initView(binding.getRoot());
setListener();
}
/**
* 界面初始化
*/
public abstract void initView(View view);
/**
* 设置监听事件
*/
public abstract void setListener();
}
在 Activity 中使用视图绑定:
public class MainActivity extends BaseActivity<ActivityMainBinding> {}使用该绑定类的实例来引用任何视图:
binding.tv.setText("---视图绑定-----");