gpt4 book ai didi

android - ViewDataBinding getVariable?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:11:00 24 4
gpt4 key购买 nike

两个主要问题是:

  • 为什么 ViewDataBinding没有类似 getVariable("variableName") 的方法它将查找一个变量并返回它,如果不存在具有该名称的变量,则返回 null。
  • 他们是否有任何方法/解决方法来实现这种行为?

所以更明确地说:如果我不知道我的 ViewDataBinding 的类型, 他们是获取其变量的方法还是我必须知道它的类型?


这是它的实际工作方式:

  1. 我有一个名为 my_layout.xml 的布局:
<layout>
<data>
<variable
android:name="myVaribale"
android:type="String"/>
</variable>
</data>

<RelativeLayout
android:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@{myVariable}"/>

</RelativeLayout>
<layout>
  1. 我膨胀它的一个实例 ViewDataBinding :

    MyLayoutBinding binding = (MyLayoutBinding) DataBindingUtil.inflate(inflater, R.layout.my_layout, root, false);  

  2. 我可以通过调用适当的方法来获取它的变量:

    String myVariable = binding.getMyVariable(); 

这就是当我们知道 ViewDataBinding 的类型 时如何获取变量的方法.


我的问题在这里:

假设我有 3 个名为 my_layout_1 的布局, my_layout_2 , my_layout_3这 3 种布局被 <layout> 包围标签。这 3 种布局也有相同的变量 ( myVariable )。

下面是布局:

我的布局_1

<layout>

<data>
<variable
android:name="myVariable"
android:type="String"/>
</variable>
</data>

<RelativeLayout
android:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@{myVariable}"
style="@style/my_style_1"/>

</RelativeLayout>

<layout>

我的布局_2

<layout>

<data>
<variable
android:name="myVariable"
android:type="String"/>
</variable>
</data>

<RelativeLayout
android:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@{myVariable}"
style="@style/my_style_2"/>

</RelativeLayout>

<layout>

my_layout_3

<layout>

<data>
<variable
android:name="myVariable"
android:type="String"/>
</variable>
</data>

<RelativeLayout
android:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@{myVariable}"
style="@style/my_style_3"/>

</RelativeLayout>

<layout>

所以不同的布局代表具有不同风格的文本(我知道它可以通过其他方式实现,但目的只是解释为什么我需要这个功能 getVariable(variableName)

现在想象一下,我有一个名为 my_text_container 的布局它将随机包含 3 种布局之一。

我的文本容器

<layout>

<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

<layout>

所以我会通过做这样的事情来添加一个文本(同样,它只是为了演示目的):

MyTextContainerBinding textContainerBinding = (MyTextContainerBinding) DataBindingUtil.inflate(inflater, R.layout.my_text_container, root, false);
int textLayoutRes;
int randomNumber = generateNumberBetween0and2();
switch(randomNumber) {
case 0: textLayoutRes = R.layout.my_layout_1;
break;
case 1: textLayoutRes = R.layout.my_layout_2;
break;
case 2: textLayoutRes = R.layout.my_layout_3;
break;
}
textContainerBinding.getRoot().addView(DataBindingUtil.inflate(inflater, textLayoutRes, root, false));

最后我想检索 myVariable但我不知道它是布局 1、2 还是 3。基本上现在可以做的是使用 instanceof运算符检查它是否是一个类型 MyLayoutBinding1 , MyLayoutBinding2MylayoutBinding3 .但正如我所说,这个用例仅用于演示目的,我可以有 999 种不同的布局。

所以我想做的是:

ViewDataBinding myLayout = DataBindingUtil.getBinding(textContainerBinding.getRoot().getChildAt(0));
String myVariable = myLayout.getVariable("myVariable");

if(myVariable != null)
Log.d(TAG, "myLayout was MylayoutBinding1 or myLayoutBinding2 or myLayoutBinding3");
else
Log.d(TAG, "mylayout was not one of the 3 layouts");

对于这篇(非常)长的帖子,我们深表歉意,但感谢您阅读它并感谢您以后的任何回答!

最佳答案

我不确定我是否明白了,但我所做的是在布局中声明一个变量,如下所示:

<data>
<variable
name="variableName"
type="bla.bla.VariableType"/>
</data>

然后首先在 onCreate 中获取布局绑定(bind):

binding = DataBindingUtil.inflate(inflater, R.layout.your_layout, container, false);

然后你应该在代码中发送一个变量到布局:

binding.setVariableName(yourVariable);

然后你可以像这样检索它:

binding.getVariableName();

关于android - ViewDataBinding getVariable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37591320/

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