Can';t使用绑定以编程方式设置按钮的android:可见性?
绑定类Can';t使用绑定以编程方式设置按钮的android:可见性?,android,Android,绑定类 data class MyName (var name: String= "", var nickname: String = "", var showButton: String = "gone") 活动\u main.xml <Button android:id="@+id/toggle_button" android:text="@string/toggle" android:layout_width="match_parent" a
data class MyName (var name: String= "", var nickname: String = "", var showButton: String = "gone")
活动\u 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文件中指定硬代码“Goe”时,
android:visibility=“Goe”
,它可以正常工作,但我希望使用绑定以编程方式控制按钮的可见性。当我传递android显示的绑定变量“gone”时,***/data binding error****msg:在android.widget.Button上找不到值类型为java.lang.String的属性“android:visibility”的getter。
据我所知,android:visibility
attribute不支持双向绑定,因为没有事件机制在属性更改时通知
尝试使用单向绑定:
android:visibility="@{myName.showButton}"
上面链接的片段,在我问题的评论部分 将showButton类型更改为Boolean。并从数据标记中的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}”
示例:
binding.studentClass = Student("Hasiba Yeasmin",false)
学生数据类(val名称:字符串,val可见:布尔值)
链接:发生这种情况是因为无法使用字符串更改值的可见性。它采用一个特殊值,如
视图.VISIBLE
,视图.GONE
和视图.VISIBLE
。
试试这个:
data class MyName (var name: String= "", var nickname: String = "", var showButton: Boolean = false)
XML:
您可以在不绑定的情况下以编程方式正常执行。你有没有尝试过或者想通过绑定来实现?我知道如何使用setVisibility(),但我想知道如何使用绑定。你有没有尝试过用isVisible代替showButton?我在internet上搜索后得到了这个链接。看一看,我想这可能是你的解决方案。链接:谢谢@ShahadatHossain。这个链接回答了我的问题。
<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>