当前位置:   article > 正文

Android之视图绑定ViewBinding_自定义view viewbinding

自定义view viewbinding

视图绑定  |  Android 开发者  |  Android Developers

1、启用视图绑定

  1. android {
  2. ...
  3. viewBinding {
  4. enabled = true
  5. }
  6. }

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

  1. <LinearLayout
  2.             ...
  3.             tools:viewBindingIgnore="true" >
  4.         ...
  5.     </LinearLayout>
  6.    

2、在 Activity 中使用视图绑定

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

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

3、在 Fragment 中使用视图绑定

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

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

4、自定义Dialog中使用

  1. public class MyDialog extends Dialog {
  2. protected View mView;
  3. protected DialogBottomBinding mBinding;
  4. public MyDialog(@NonNull Context context, @StyleRes int themeResId) {
  5. super(context, themeResId);
  6. //原来的写法
  7. // mView = View.inflate(getContext(), getLayoutId(), null);
  8. //使用ViewBinding的写法
  9. mBinding = DialogBottomBinding.inflate(getLayoutInflater());
  10. mView = mBinding.getRoot();
  11. setContentView(mView);
  12. }
  13. }

5、在自定义View中使用

  1. // 自定义view
  2. public class MyLinearLayout extends LinearLayout {
  3. public MyLinearLayout(Context context) {
  4. this(context, null);
  5. }
  6. public MyLinearLayout(Context context, @Nullable AttributeSet attrs) {
  7. this(context, attrs, 0);
  8. }
  9. public MyLinearLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
  10. super(context, attrs, defStyleAttr);
  11. // 正常添加布局(亲测有效)
  12. ViewMyLayoutBinding binding = LibPlateformLayoutBinding.inflate(LayoutInflater.from(getContext()), this, true);
  13. // 方法二:
  14. // val root = View.inflate(context, R.layout.widget_core, this)
  15. // binding = WidgetCoreBinding.bind(root)
  16. // 针对根标签为merge
  17. ViewMyLayoutMergeBinding binding = ViewMyLayoutMergeBinding.inflate(LayoutInflater.from(getContext()), this);
  18. }
  19. }

6、在RecyclerView.Adapter中使用

  1. class StudentAdapter(private val context: Context,
  2. private val list: List<AddressInfo>) : RecyclerView.Adapter<ItemViewHolder>() {
  3. override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
  4. val studentBinding = ItemAddressBinding.inflate(LayoutInflater.from(
  5. context), parent, false)
  6. return ItemViewHolder(studentBinding)
  7. }
  8. @SuppressLint("SetTextI18n")
  9. override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
  10. holder.itemBinding.tvName.text = "姓名:" + list[position].name
  11. }
  12. override fun getItemCount(): Int {
  13. return list.size
  14. }
  15. inner class ItemViewHolder(var itemBinding: ItemAddressBinding) : RecyclerView.ViewHolder(
  16. itemBinding.root)
  17. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/319892
推荐阅读
相关标签
  

闽ICP备14008679号