- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
两个主要问题是:
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>
我膨胀它的一个实例 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
)。
下面是布局:
我的布局_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
, 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");
对于这篇(非常)长的帖子,我们深表歉意,但感谢您阅读它并感谢您以后的任何回答!
最佳答案
我不确定我是否明白了,但我所做的是在布局中声明一个变量,如下所示:
<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/
这是 Android Studio 中的一个工作项目,今天当我打开项目时,它显示多个 BindingImpl 类的错误如下。每个 BindingImpl 类都有两种类型的错误。 第一个: error:
两个主要问题是: 为什么 ViewDataBinding没有类似 getVariable("variableName") 的方法它将查找一个变量并返回它,如果不存在具有该名称的变量,则返回 null。
我正在使用 Android 数据绑定(bind)库来绑定(bind)具有 的 xml 布局 布局.xml ... ... 在为
我正在编写一个 Robolectric 单元测试,它要求我使用被测试 View 数据绑定(bind)类 (ViewDataBinding) 下的 Activity ,不幸的是,不幸的是,我一直坚持它在
我定义了一个包含 2 个 ViewStubs 的布局。它们的定义如下: 在我的适配器中,我试图通过 DataBinding 库生成的 ViewDataBinding 访问 ViewStub,在我的
我正在使用 Android Studio 2.0 Preview 4。我正在使用 Android SDK 工具 25 rc1。无论我清理/重建项目多少次,此错误都会持续存在。 File-> Inval
1.I add databinding in android in build.gradle.app2.I add layout file to the xml code3.I import the
安卓工作室 3.6。金丝雀 12 build.gradle: buildscript { ext.kotlin_version = '1.3.50' ext.RETROFIT_VERS
我是 Android 数据绑定(bind)库的新手。 我有一堆警告,例如: warning: viewModel.someBoolean.getValue() is a boxed field but
异常(exception)情况如下: java.lang.NullPointerException: Attempt to read from field 'java.lang.Runnable an
我有一个 BaseFragment 类: abstract class BaseFragment: Fragment(), View.OnClickListener { private lat
我是一名优秀的程序员,十分优秀!