用于绑定的类
data class MyName (var name: String= "", var nickname: String = "", var showButton: String = "gone")
activity_main.xml
<Button
android:id="@+id/toggle_button"
android:text="@string/toggle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:visibility="@={myName.showButton}"
style="@style/Widget.AppCompat.Button.Colored"/>
当我在XML文件中指定硬代码“去” android: visibility=" gone"
时,它可以正常工作,但是我想使用绑定以编程方式控制按钮的可见性。当我将“ gone”作为绑定变量传递给android时,****/ data binding error ****msg: Cannot find the getter for attribute 'android: visibility' with value type java.lang.String on android.widget.Button.
答案 0 :(得分:1)
示例:
binding.studentClass = Student("Hasiba Yeasmin",false)
数据类Student(val name:String,val isVisible:Boolean)
链接:Set android: visibility programmatically for a button using binding
答案 1 :(得分:0)
据我所知,android:visibility
属性不支持双向绑定,因为没有事件机制可在属性更改时通知。
尝试使用单向绑定:
android:visibility="@{myName.showButton}"
答案 2 :(得分:0)
上面链接的片段,在我的问题的评论部分。
将showButton类型更改为布尔值。并从data标记中的xml导入视图,以在xml内部进行访问。
<data>
<variable name="myName" type="com.example.aboutme.MyName"/>
<import type="android.view.View"/>
</data>
在xml文件中,android:visibility="@{myName.showButton ? View.VISIBLE : View.GONE}"
。
答案 3 :(得分:0)
之所以发生这种情况,是因为您不能使用字符串来更改值的可见性。它采用一个特殊值,例如View.VISIBLE
,View.GONE
和View.INVISIBLE
。
试试这个:
data class MyName (var name: String= "", var nickname: String = "", var showButton: Boolean = false)
XML:
<layout>
<data>
<import type="android.view.View" />
</data>
<Button
android:id="@+id/toggle_button"
android:text="@string/toggle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:visibility="@{myName.showButton? View.VISIBLE : View.GONE }"
style="@style/Widget.AppCompat.Button.Colored"/>
</layout>