当前位置: 首页 > 知识库问答 >
问题:

带有数据绑定的布局可见性默认值不起作用

东方夕
2023-03-14

我试图通过数据绑定来设置布局可见性。从数据库加载数据时,我在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
    }
}

我有什么遗漏吗?默认情况下,我希望将错误布局的可见性设置为不可见。但默认情况下会显示它。

共有3个答案

颜乐
2023-03-14
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"/>

姬俊远
2023-03-14

这是因为您在getComfortErrorVitivity方法中出错。开始时,您的sortErrorMessage为空,因此您的方法返回可见a并显示文本视图,请尝试将您的方法更改为:

@Bindable
    public int getComfortErrorVisibility(){
        return TextUtils.isEmpty(comfortErrorMessage.get()) ? View.INVISIBLE: View.VISIBLE;
    }
姜景焕
2023-03-14

好吧,默认值只用于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中,我将其称为: 当我第一次触发它时,它可以工作- 因为变量会切换其值。但是在控制器范围内(指令外部)不会在指令完成时切换回原来的状态。 假设我了解应该发生的情况,则在致电时切换回应该发生的情况。 缺少什么会导致双向绑定不将值推回传