gpt4 book ai didi

android - ViewBinding - 如何获得包含布局的绑定(bind)?

转载 作者:行者123 更新时间:2023-12-03 07:26:54 27 4
gpt4 key购买 nike

在使用 ViewBinding 时,我遇到了一些未记录的案例。
第一:如何获得包含的通用 View 布局部分的绑定(bind),主绑定(bind)只看到主布局中的项目?
第二:如何获得包含的合并类型布局部分的绑定(bind),再次主绑定(bind)只看到主布局中的项目?

最佳答案

的情况下:

  • 包含通用布局(不是合并节点),我们需要为包含的部分分配 ID,这样在绑定(bind)中我们将可以访问包含的子部分
  • <include
    android:id="@+id/your_id"
    layout="@layout/some_layout" />

    这种方式在您的 Activity 代码中:
    private lateinit var exampleBinding: ActivityExampleBinding  //activity_example.xml layout

    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    exampleBinding = ActivityExampleBinding.inflate(layoutInflater)
    setContentView(exampleBinding.root)
    //we will be able to access included layouts view like this
    val includedView: View = exampleBinding.yourId.idOfIncludedView
    //[...]
    }
  • 在外部布局中包含合并 block 。我们无法为其添加 ID,因为合并 block 不是 View 。
    假设我们有这样的永恒合并布局(merge_layout.xm):
  • <?xml version="1.0" encoding="utf-8"?>
    <merge xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:showIn="@layout/activity_example">

    <TextView
    android:id="@+id/some_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World" />
    </merge>

    要正确绑定(bind)这样的合并布局,我们需要:

    在您的 Activity 代码中:
    private lateinit var exampleBinding: ActivityExampleBinding  //activity_example.xml layout
    private lateinit var mergeBinding: MergeLayoutBinding //merge_layout.xml layout

    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    exampleBinding = ActivityExampleBinding.inflate(layoutInflater)
    //we need to bind the root layout with our binder for external layout
    mergeBinding = MergeLayoutBinding.bind(exampleBinding.root)
    setContentView(exampleBinding.root)
    //we will be able to access included in merge layout views like this
    val mergedView: View = mergeBinding.someView
    //[...]
    }

    关于android - ViewBinding - 如何获得包含布局的绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58730127/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com