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

在android中使用数据绑定设置滚动标志

楚乐逸
2023-03-14

我想使用数据绑定在折叠工具栏布局中设置滚动标志。这就是我想要实现的目标:

应用程序:layout_scrollFlags="@{isListHolty?捕捉:滚动|exitUntilCollapse|捕捉}"

但它给出了以下错误:

发现数据绑定错误。****/数据绑定错误****msg:标识符必须具有XML文件中的用户定义类型。snap不见了

所以基本上我只想在列表为空时关闭折叠效果。我可以在代码中实现这一点,但如果有一种方法可以使用xml中的数据绑定来实现这一点,那将非常有帮助。

共有2个答案

诸葛奇玮
2023-03-14

您可以使用BindingAdapter来实现。就像这样:

  1. 添加绑定适配器:
@BindingAdapter("app:layout_scrollFlags")
    fun setLayoutScrollFlags(toolbar : Toolbar, flags : Int) {

    //toolbar is your toolbar within an AppBarLayout
    val params = toolbar.layoutParams as AppBarLayout.LayoutParams
    params.setScrollFlags(flags);
    toolbar.layoutParams = params
}

    app:layout_scrollFlags="@{viewModel.flags}"

将活动/片段端的标志设置为整数:

if(isListEmpty) {
    viewModel.setFlags(snap) 
} else {
    viewModel.setFlags(scroll|exitUntilCollapsed|snap)
}

因此,您不会在视图模型中的flag上保存任何“与Android相关”的数据,比如reference。对于视图模型,它将只是一个整数变量

希望会有帮助)

祁坚壁
2023-03-14

我使用绑定适配器实现了这一点。尽管我仍然想知道这是否只能通过xml实现,这样我们就不必使用任何自定义属性。

所以我添加了一个自定义属性

 @BindingAdapter("set_scroll_flags")
public static void setCollapsingToolbarScroll(CollapsingToolbarLayout 
 collapsingToolbar, boolean isListEmpty) {

    if(isListEmpty)
    {
        AppBarLayout.LayoutParams toolbarLayoutParams = (AppBarLayout.LayoutParams) collapsingToolbar.getLayoutParams();
        toolbarLayoutParams.setScrollFlags(0);
        collapsingToolbar.setLayoutParams(toolbarLayoutParams);
    }
    else
    {

        AppBarLayout.LayoutParams toolbarLayoutParams = (AppBarLayout.LayoutParams) collapsingToolbar.getLayoutParams();
        toolbarLayoutParams.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
                | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED | AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP);
        collapsingToolbar.setLayoutParams(toolbarLayoutParams);
    }
}

当列表为空时,上面的代码会停止折叠效果,当列表不为空时,它会根据您设置的滚动标志(我使用了EXIT_,直到_折叠、捕捉和滚动)。

然后在xml中,在CollasingToolbarLayout中使用如下属性:

set_scroll="@{isList空}"

其中“isListEmpty”可以是xml数据标记中的变量。

 类似资料:
  • 问题内容: 更新说明: 上面的示例 正常工作 ,因为版本1.0-rc4 解决 了需要不必要的变量的问题。 原始问题: 我完全按照文档中的描述进行操作,但不起作用: main.xml: button.xml: MyActivity.java: 如何获得按钮? 问题答案: 问题在于所包含的布局没有被视为数据绑定布局。要使其成为一体,您需要传递一个变量: button.xml: main.xml: 然后

  • 上面的示例工作正常,因为版本1.0-rc4修复了需要不必要变量的问题。 我完全按照它在留档中的描述,它不起作用: main.xml: buttons.xml: MyActivity.java: 如何获取按钮?

  • 有人能让我知道使用数据绑定在图像视图中填充图像资源的正确用法吗

  • 尝试使用自定义变量设置的可见性,但发生错误:。是否可以使用数据绑定设置视图可见性?多谢了。

  • 我试图使用数据绑定将可提取的资源ID设置为ImageView的Android:src 下面是我的目标: 它根本不显示图像。我做错了什么? 顺便说一句,它完美地使用了标准方式:

  • Android Studio:3.1.0、3.1.1 分级:4.4 生成工具:3.1.0 我正在使用数据绑定库。当我向project添加布局文件或向布局文件中添加任何视图时,Android Studio无法为布局生成绑定类,直到重新构建项目。 布局文件: 我查看了Android Studio的日志,当布局文件发生变化时,总会有错误消息。