当前位置: 首页 > news >正文

ViewBinding——Android之视图绑定

高版本的gradle不再支持 kotlin-android-extensions插件,因此view的绑定方式也有所改变。

1.启用视图绑定

android {...viewBinding {enabled = true}}

如果想在生成绑定类时忽略某个布局文件,请将 tools:viewBindingIgnore="true" 属性添加到相应布局文件的根视图中:

<LinearLayout...tools:viewBindingIgnore="true" >...
</LinearLayout>

2.在 Activity 中使用视图绑定

如需设置绑定类的实例以供 Activity 使用,请在 Activity 的 onCreate() 方法中执行以下步骤:

  1. 调用生成的绑定类中包含的静态 inflate() 方法。此操作会创建该绑定类的实例以供 Activity 使用。
  2. 通过调用 getRoot() 方法或使用 Kotlin 属性语法获取对根视图的引用。
  3. 将根视图传递到 setContentView(),使其成为屏幕上的活动视图。
 private lateinit var binding: ResultProfileBindingoverride fun onCreate(savedInstanceState: Bundle) {super.onCreate(savedInstanceState)binding = ResultProfileBinding.inflate(layoutInflater)val view = binding.rootsetContentView(view)}

3.在 Fragment中使用视图绑定

如需设置绑定类的实例以供 Fragment 使用,请在 Fragment 的 onCreateView() 方法中执行以下步骤:

  1. 调用生成的绑定类中包含的静态 inflate() 方法。此操作会创建该绑定类的实例以供 Fragment 使用。
  2. 通过调用 getRoot() 方法或使用 Kotlin 属性语法获取对根视图的引用。
  3. 从 onCreateView() 方法返回根视图,使其成为屏幕上的活动视图。
    private var _binding: ResultProfileBinding? = nullprivate val binding get() = _binding!!override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? {_binding = ResultProfileBinding.inflate(inflater, container, false)return binding.root}override fun onDestroyView() {super.onDestroyView()_binding = null}

4.自定义Dialog中使用

public class MyDialog extends Dialog {protected View mView;protected DialogBottomBinding mBinding;public MyDialog(@NonNull Context context, @StyleRes int themeResId) {super(context, themeResId);//原来的写法// mView = View.inflate(getContext(), getLayoutId(), null);//使用ViewBinding的写法mBinding = DialogBottomBinding.inflate(getLayoutInflater());mView = mBinding.getRoot();setContentView(mView);}
}

5.在自定义View中使用

// 自定义view
public class MyLinearLayout extends LinearLayout {public MyLinearLayout(Context context) {this(context, null);}public MyLinearLayout(Context context, @Nullable AttributeSet attrs) {this(context, attrs, 0);}public MyLinearLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);// 正常添加布局(亲测有效)ViewMyLayoutBinding binding = LibPlateformLayoutBinding.inflate(LayoutInflater.from(getContext()), this, true);// 方法二:// val root = View.inflate(context, R.layout.widget_core, this)// binding = WidgetCoreBinding.bind(root)// 针对根标签为mergeViewMyLayoutMergeBinding binding = ViewMyLayoutMergeBinding.inflate(LayoutInflater.from(getContext()), this);}}

6.在RecyclerView的Adapter中使用

class StudentAdapter(private val context: Context,private val list: List<AddressInfo>) : RecyclerView.Adapter<ItemViewHolder>() {override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {val studentBinding = ItemAddressBinding.inflate(LayoutInflater.from(context), parent, false)return ItemViewHolder(studentBinding)}@SuppressLint("SetTextI18n")override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {holder.itemBinding.tvName.text = "姓名:" + list[position].name}override fun getItemCount(): Int {return list.size}inner class ItemViewHolder(var itemBinding: ItemAddressBinding) : RecyclerView.ViewHolder(itemBinding.root)
}

以上是各场景使用viewBinding的方式,基本可以满足大家的开发需求,如有其他场景的可以在评论区留言讨论。

http://www.lryc.cn/news/174553.html

相关文章:

  • vue学习-04vue的props配置项和mixin混入
  • 九、多项式朴素贝叶斯算法(Multinomial NB,Multinomial Naive Bayes)(有监督学习)
  • 数据结构上机练习——单链表的基本操作、头文件、类定义、main函数、多种链表算法的实现,含注释
  • 如何通过AI视频智能分析技术,构建着装规范检测/工装穿戴检测系统?
  • C语言自定义类型(上)
  • Python - 小玩意 - 圣诞树背景音乐弹窗
  • The 2023 ICPC Asia Regionals Online Contest (1) E. Magical Pair(数论 欧拉函数)
  • <十三>objectARX开发:模拟实现CAD的移动Move命令
  • Autosar基础:模式管理-EcuM
  • 代码随想录Day42 | 01背包问题| 416. 分割等和子集
  • UML六大关系总结
  • ElementUI基本介绍及登录注册案例演示
  • Python爬虫-某网酒店评论数据
  • C# Onnx Yolov8 Detect 水果识别
  • 测试网页调用本地可执行程序(续1:解析参数中的中文编码)
  • C++入门知识
  • spring和springmvc常用注解
  • 【Java】Java生成PDF工具类
  • STL map,插入和查找的一些注意事项
  • 基于springboot+vue的客户关系管理系统(前后端分离)
  • 【Java 基础篇】Java Stream 流详解
  • 题解:ABC321A - 321-like Checker
  • Zig实现Hello World
  • Vue3+element-plus切换标签页时数据保留问题
  • 前端教程-TypeScript
  • 代码随想录算法训练营 动态规划part06
  • 能跑通的mmdet3d版本
  • SD-MTSP:萤火虫算法(FA)求解单仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)
  • bootstrapv4轮播图去除两侧阴影及线框的方法
  • python 自建kafka消息生成和消费小工具