gpt4 book ai didi

android - 如何在包含 Android 布局的同时访问其绑定(bind)中的元素?

转载 作者:行者123 更新时间:2023-12-04 23:56:20 24 4
gpt4 key购买 nike

我在我的 Activity 中这样做:

       <include
android:id="@+id/withGyroLayout"
layout="@layout/with_gyro_layout"/>

在哪里with_gyro_layout.xml

<androidx.constraintlayout.widget.ConstraintLayout
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"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.example.util.FixedTransformerViewPager
android:id="@+id/viewPagerTop"
android:layout_width="0dp"
android:layout_height="143dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<com.example.util.FixedTransformerViewPager
android:id="@+id/viewPagerBottom"
android:layout_width="0dp"
android:layout_height="143dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/viewPagerTop" />
</androidx.constraintlayout.widget.ConstraintLayout>

但是,我无法访问元素 viewPagerBottomviewPagerTop来 self 的 Activity 的绑定(bind):

binding.viewPagerBottom.setVisibility(View.VISIBLE);
binding.viewPagerTop.setVisibility(View.VISIBLE);

我试着把 with_gyro_layout.xml周围<merge>...</merge>但它也没有解决。

我希望能够以编程方式在 with_gyro_layout.xml 之间进行更改和 without_gyro_layout.xml并通过绑定(bind)访问其内部元素。我该怎么做?

最佳答案

要在包含的布局中使用 ViewBinding,需要做两件事。

<merge>不支持

该文档仅涵盖数据绑定(bind),而不涉及 View 绑定(bind),但它似乎适用于两者。参见 https://developer.android.com/topic/libraries/data-binding/expressions#includes

Data binding doesn't support include as a direct child of a merge element.

换句话说,布局必须有一个真实的、具体的 View 作为它的根元素。支持以下内容:

<LinearLayout ...>
<TextView ... />
<TextView ... />
</LinearLayout>

但是一个带有 <merge> 的布局不支持根:

<merge ...>
<TextView ... />
<TextView ... />
</merge>

<include>标记必须指定一个 ID

通常,可以在不明确指定 ID 的情况下包含布局。 View 绑定(bind)不支持这个:

<include layout="@layout/included_layout"/>

即使包含的布局在其根元素上有一个 ID,它仍然不受支持。相反,您必须在 <include> 上明确指定 ID标签:

<include
android:id="@+id/some_id"
layout="@layout/included_layout"/>

一旦满足这两个条件,您为外部布局生成的绑定(bind)将包含对包含布局的绑定(bind)的引用。假设我们的两个文件是 outer_layout.xmlincluded_layout.xml .然后会生成这两个文件:

  • OuterLayoutBinding.java
  • IncludedLayoutBinding.java

您可以像这样引用包含的 View :

val outerBinding = OuterLayoutBinding.inflate(layoutInflater)
val innerBinding = binding.someId // uses the id specified on the include tag
val innerView = innerBinding.viewPagerTop

或者,简而言之:

val binding = OuterLayoutBinding.inflate(layoutInflater)
val innerView = binding.someId.viewPagerTop

关于android - 如何在包含 Android 布局的同时访问其绑定(bind)中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62867136/

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