MHo*_*gge 8 android android-databinding
两个主要问题是:
getVariable("variableName")
会查找变量并返回它,如果不存在具有此名称的变量,则返回null.所以更明确一点:如果我不知道我的ViewDataBinding的类型,是他们获取变量的方法还是我必须知道它的类型?
以下是它的实际工作方式:
<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>
Run Code Online (Sandbox Code Playgroud)
我给它的ViewDataBinding实例充气:
MyLayoutBinding binding = (MyLayoutBinding) DataBindingUtil.inflate(inflater, R.layout.my_layout, root, false);
我可以通过调用适当的方法来获取它的变量:
String myVariable = binding.getMyVariable();
因此,这是如何让一个变量时,我们知道是什么类型的的ViewDataBinding.
我的问题在这里:
让我们想象一下我有3个布局叫my_layout_1
,my_layout_2
,my_layout_3
和那些3个布局被包围<layout>
标记.这3个布局也有相同的变量(myVariable
).
所以这里是布局:
my_layout_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>
Run Code Online (Sandbox Code Playgroud)
my_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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
因此,不同的布局代表具有不同风格的文本(我知道它可以通过其他方式实现,但目标只是解释为什么我需要这个功能getVariable(variableName)
.
想象一下,我得到了一个布局my_text_container
,它将随机包含3个布局中的一个.
my_text_container
<layout>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<layout>
Run Code Online (Sandbox Code Playgroud)
所以我会通过做这样的事情来添加文本(再次,它仅用于演示目的):
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));
Run Code Online (Sandbox Code Playgroud)
最后我想要检索,myVariable
但我不知道它是否是布局1,2或3.基本上现在可以做的是使用instanceof运算符来检查它是否是一个类型MyLayoutBinding1
,MyLayoutBinding2
或者MylayoutBinding3
.但正如我所说,这个用例仅用于演示目的,我可以有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");
Run Code Online (Sandbox Code Playgroud)
对于这个(非常)长的帖子感到抱歉,但感谢您阅读它以及将来的任何答案!
Rog*_*ris -1
我不确定我是否明白,但我所做的是在布局中声明一个变量,如下所示:
<data>
<variable
name="variableName"
type="bla.bla.VariableType"/>
</data>
Run Code Online (Sandbox Code Playgroud)
然后首先在 onCreate 中获取布局绑定:
binding = DataBindingUtil.inflate(inflater, R.layout.your_layout, container, false);
Run Code Online (Sandbox Code Playgroud)
然后您应该使用如下代码将变量发送到布局:
binding.setVariableName(yourVariable);
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样检索它:
binding.getVariableName();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1875 次 |
最近记录: |