我试图通过数据绑定来设置布局可见性。从数据库加载数据时,我在XML中设置的默认可见性不起作用。这是布局文件
<RelativeLayout
android:id="@+id/error_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="@{homeViewModel.comfortErrorVisibility, default=invisible}"/>
视图模型是这样的
public class HomeViewModel extends BaseObservable {
private ObservableField<String> comfortErrorMessage = new ObservableField<>();
public HomeViewModel(){
validateSpace();
}
@Bindable
public int getComfortErrorVisibility(){
// change the visibility based on error message
return TextUtils.isEmpty(comfortErrorMessage.get()) ? View.VISIBLE : View.INVISIBLE;
}
private void validateSpace(){
//some business logic to set the comfrotErrorMessage
}
}
我有什么遗漏吗?默认情况下,我希望将错误布局的可见性设置为不可见。但默认情况下会显示它。
public class HomeViewModel extends BaseObservable {
private ObservableField<String> comfortErrorMessage = new ObservableField<>();
public HomeViewModel(){
validateSpace();
}
}
在
<RelativeLayout
android:id="@+id/error_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="@{TextUtils.isEmpty(viewmodel.comfortErrorMessage) ? View.VISIBLE : View.INVISIBLE"/>
这是因为您在getComfortErrorVitivity
方法中出错。开始时,您的sortErrorMessage
为空,因此您的方法返回可见a并显示文本视图,请尝试将您的方法更改为:
@Bindable
public int getComfortErrorVisibility(){
return TextUtils.isEmpty(comfortErrorMessage.get()) ? View.INVISIBLE: View.VISIBLE;
}
好吧,默认值
只用于Android studio上的预览,不会在运行时执行任何操作。再也找不到官方文件了,但是有很多关于它的帖子。
据我所知,当您设置绑定时,数据绑定框架将调用getComfortErrorVitivity
来获取错误消息的可见性。您的条件设置为当错误消息为空或null
时可见性是可见的:
TextUtils.isEmpty(comfortErrorMessage.get()) ? View.VISIBLE : View.INVISIBLE;
因为您的sortErrorMessage
像观测字段()
一样初始化,所以它的初始值将为空,因此您首先看到的是一个可见的错误字段。
也许你应该改变能见度的条件?
我正在使用android studio 2.1使用android中最新的数据绑定。使用下面代码中描述的visibility标记将错误获取为 JAVAlang.RuntimeException:发现数据绑定错误。/数据绑定错误****msg:标识符必须具有XML文件中的用户定义类型。视图缺少文件:D:\HP\HealthPortal\u Android\Code\app\src\main\res\l
问题内容: 在下面的小提琴中,我分别对可见性和不透明度进行了过渡。后者有效,但前者无效。此外,在可见的情况下,过渡时间被解释为悬停时的延迟。在Chrome和Firefox中都会发生。这是错误吗? 情况1: 情况2: 问题答案: 这不是错误 -您只能在有序/可计算的属性上进行转换(一种简单的想法是,任何具有数字开始和结束数字值的属性。尽管有一些例外)。 这是因为过渡通过计算两个 值 之间的关键帧并通
问题内容: 我的实体中有一个布尔型属性。这是我的注释: 但是效果并不理想。这是我作为生成表的结果得到的SQL代码: 我究竟做错了什么? 因此,当我尝试将此类的实例保存到数据库时,出现异常: 如果我删除财产: 因此在这种情况下,我可以保存创建的对象。但是仍然 没有设置默认值, 并且我在数据库中此字段的值中得到NULL。 有什么想法吗?如果重要,我会使用MySQL Server 5.1。我将非常感谢您
V-Model绑定并从router.params加载数据,可选默认不工作Vue.js 2 我有4个选择和1个文本输入 在我的data()方法中,我返回一个数组,其中包含selects选项元素的默认值。 我想要的是当组件加载以从url(router.params)中获取值,然后从选择中选择正确的值,并在输入框[搜索框]中显示文本输入(通过路由器参数) 我尝试了双向绑定、单向绑定、使用setTimeo
问题内容: 我有一个双向数据绑定,它不会更改发送到指令的变量的值。 我的指令监视触发器,并将焦点集中在associates元素上(基于在SO处找到的代码): 在HTML中,我将其称为: 当我第一次触发它时,它可以工作- 因为变量会切换其值。但是在控制器范围内(指令外部)不会在指令完成时切换回原来的状态。 假设我了解应该发生的情况,则在致电时切换回应该发生的情况。 缺少什么会导致双向绑定不将值推回传