无法使用绑定以编程方式为按钮设置android:visibility?

时间:2019-07-14 08:09:00

标签: android

用于绑定的类

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.

4 个答案:

答案 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.VISIBLEView.GONEView.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>