[英]Android Data binding - Error:(119, 29) Identifiers must have user defined types from the XML file. main_radio_subscribe is missing it
I been trying to control the visibility of a view using the Implicit Attribute Listeners( reference ) in android data binding which allows to access views by id and access attributes like checked, visible etc ..., however when trying to use this, it throws an error like so 我一直试图使用android数据绑定中的隐式属性监听器( 引用 )来控制视图的可见性,它允许通过id和访问属性(如checked,visible等)访问视图,但是当尝试使用它时,它会抛出像这样的错误
Error:(119, 29) Identifiers must have user defined types from the XML file. addTodo_switch_remind is missing it
<android.support.v7.widget.SwitchCompat
android:id="@+id/addTodo_switch_remind"
style="@style/MediumTextViewStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/addTodo_space_project"
android:text="@string/add_todo_remind_label"
android:textOff="@string/generic_no_text"
android:textOn="@string/generic_yes_text" />
<android.support.v4.widget.Space
android:id="@+id/addTodo_space_remind"
style="@style/FormsSpacingStyle"
android:layout_below="@+id/addTodo_switch_remind" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/addTodo_space_remind"
android:orientation="vertical"
android:padding="@dimen/grid_box_single"
android:visibility="@{addTodo_switch_remind.checked ? View.VISIBLE : View.GONE}">
As you use View.VISIBLE
/ View.GONE
in your .xml file, you should import the View
type by doing adding <import type="android.view.View"/>
in the data section like the following: 当您在.xml文件中使用
View.VISIBLE
/ View.GONE
时,您应该通过在数据部分中添加<import type="android.view.View"/>
来导入View
类型,如下所示:
<data>
<import type="android.view.View"/>
<variable
name="viewModel"
type="xx.xx.MyViewModel"/>
</data>
Looks like the implicit Attribute listeners use camel case when it is used in the expressions, thanks to this post I figured it out. 看起来隐式属性侦听器在表达式中使用驼峰的情况下,感谢这篇文章我想出来了。
<!--Recurring Reminder -->
<android.support.v7.widget.SwitchCompat
android:id="@+id/addTodo_switch_remind"
style="@style/MediumTextViewStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/addTodo_space_project"
android:text="@string/add_todo_remind_label"
android:textOff="@string/generic_no_text"
android:textOn="@string/generic_yes_text" />
<android.support.v4.widget.Space
android:id="@+id/addTodo_space_remind"
style="@style/FormsSpacingStyle"
android:layout_below="@+id/addTodo_switch_remind" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/addTodo_space_remind"
android:orientation="vertical"
android:padding="@dimen/grid_box_single"
android:visibility="@{addTodoSwitchRemind.checked ? View.VISIBLE : View.GONE}">
Documenting for others who have the same issue 记录具有相同问题的其他人
Step 1 : create BindingAdapter : 第1步 :创建BindingAdapter :
@BindingAdapter("android:visibility")
public static void setVisibility(final View view, @IdRes int layourId) {
SwitchCompat switcher = (SwitchCompat)view.getRootView().findViewById(layourId)
switcher.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
view.setVisibility(isChecked ? View.VISIBLE : View.GONE);
}
}
}
Step 2 : import R
class in databinding data section at you layout.xml : 第2步 :在layout.xml中的数据绑定数据部分导入
R
类:
<data>
<import type="example.package.R"/>
</data>
Step 3 : bind custom view to your switcher like this: 第3步 :将自定义视图绑定到切换台,如下所示:
<android.support.v7.widget.SwitchCompat
android:id="@+id/addTodo_switch_remind"/>
<LinearLayout
android:visibility="@{R.id.addTodo_switch_remind">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.