android-databinding 相关问题

数据绑定库用于编写声明性布局并最小化绑定应用程序逻辑和布局所需的粘合代码。数据绑定库提供了灵活性和广泛的兼容性 - 它是一个支持库,因此您可以将它与所有Android平台版本一起使用,返回到Android 2.1(API级别7+)。

Android Studio:应用程序目录中的构建文件夹出错

我在构建文件夹中的各种文件中遇到多个错误,该文件夹标有“‘构建’文件夹下的文件已生成,不应编辑。”我有预感这就是

回答 1 投票 0

应用程序可能会卡在以前运行良好的 Binding.inflate 上,这可能是什么原因?

在意识到我的应用程序似乎表现不佳后,我做了一些聪明的调试策略,即在我的代码和一些厚颜无耻的调试断点之间添加日志调用,我意识到我的 MainActivity

回答 1 投票 0

RadioGroup Android 数据绑定 XML 与包含布局

我目前面临应用程序中单选按钮的问题。我的应用程序包含信息表单,其中包括带有其他视图的单选按钮,并且有多种表单。当我选择选项 1...

回答 1 投票 0

MVVM+Kotlin+数据绑定最佳实践

我正在 MVVM+Kotlin+Databinding 上构建一个应用程序,我遇到了这种情况。 我有 LoginFragment,它有一个电话号码 edittext 和一个按钮, 现在我需要检查电话号码是否...

回答 2 投票 0

如何在多行文本视图的最后一个字符后面放置图标

我想在(可能的)多行 TextView 的最后一个单词之后找到一个视图。 例如,TextView 可能有两行,第二行大约是 Tex 的一半...

回答 1 投票 0

我正在使用数据绑定更新 ViewModel,但视图未更新

如果我更新 ViewModel,消耗此数据的 View 应该会自动更新,对吧?我缺少什么? 这是 MainActivity 类: 类 MainActivity : AppCompatActivity() {

回答 1 投票 0

数据绑定在模块中不起作用

我在我的应用程序中使用数据绑定。我有一个应用程序模块,数据绑定工作成功。 然而,我也有一个“家庭模块”,我正在尝试使用相同的技术,但是......

回答 2 投票 0

Android 数据绑定无法找到接受参数类型 * 的 setter

的设置者 我试图在数据绑定布局中声明一个变量,它的类型是整数数组,但在构建项目时出现错误 找不到接受参数类型“int[]”的 setter 如果绑定适配器提供设置器,请检查该适配器是否已 注释正确并且参数类型匹配。 xml中的变量声明 <variable name="availableGradesIndexes" type="int[]" /> <variable name="subject" type="Subject" /> 绑定适配器 @BindingAdapter("availableGradesIndexes", "subject") fun LinearLayout.bindGradeWithMarks(availableGradesIndexes: Array<Int>) { //.... } 用法 <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:orientation="horizontal" app:subjct="@{subject}" app:availableGradesIndexes="@{availableGradesIndexes}" tools:layout_height="@dimen/_40sdp" /> 我还尝试过什么 尝试将绑定适配器方法的类型声明为IntArray,如fun LinearLayout.bindGradeWithMarks(availableGradesIndexes: IntArray) 还尝试了List<Int>之类的fun LinearLayout.bindGradeWithMarks(availableGradesIndexes: List<Int>)和变量类型List&lt;Int&gt; 还尝试将绑定变量类型设置为 Integer 和 Integer[] 以及 List&lt;Integer&gt; 所以问题是如何使用绑定适配器绑定整数列表或数组?! 因为Kotlin中的Array就是Java中的Integer[]。 尝试在 Java 中使用 IntArray 它将是 int[]。 我用 IntArray 尝试了你的示例,它有效。 @BindingAdapter("availableGradesIndexes") fun LinearLayout.bindGradeWithMarks( availableGradesIndexes: IntArray ) { } 你能展示你的布局 XML 吗? <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <variable name="availableGradesIndexes" type="int[]" /> </data> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:orientation="horizontal" app:availableGradesIndexes="@{availableGradesIndexes}" tools:layout_height="match_parent" /> </layout> 您可以使用 int[] 代替 List,但这需要将 List 类导入到布局中,以便能够将其用作 type 变量的 availableGradesIndexes: <data> <import type="java.util.List" /> <variable name="availableGradesIndexes" type="List&lt;Integer&gt;" /> </data> 然后您可以使用 List<Int> 将其应用到 BindingAdapter: @BindingAdapter("availableGradesIndexes") fun LinearLayout.bindGradeWithMarks(availableGradesIndexes: List<Int>) { //.... Log.d("LOG_TAG", "bindGradeWithMarks: $availableGradesIndexes") // For testing } 如果你想使用int[]数组;无需进口: <data> <variable name="availableGradesIndexes" type="int[]" /> </data> 适配器: @BindingAdapter("availableGradesIndexes") @JvmStatic fun LinearLayout.bindGradeWithMarks(availableGradesIndexes: IntArray) { //.... Log.d("LOG_TAG", "bindGradeWithMarks: ${availableGradesIndexes.toList()}") } 更新: Cannot find a setter for <android.widget.LinearLayout app:availableGradesIndexes> that accepts parameter type 'java.util.List<java.lang.Integer>' 这意味着布局中不识别BidningAdapter方法;所以只需确保将其添加到伴随对象中,并用 @JvmStatic: 进行注释 class BindingAdapters { companion object { @BindingAdapter("availableGradesIndexes") @JvmStatic fun LinearLayout.bindGradeWithMarks(availableGradesIndexes: List<Int>) { //.... Log.d("LOG_TAG", "bindGradeWithMarks: $availableGradesIndexes") } } } 问题出在另一个属性名称上,我不知道为什么错误消息没有提到它!! <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:orientation="horizontal" app:subjct="@{subject}" //the attribute name was messing a letter (subject) app:availableGradesIndexes="@{availableGradesIndexes}" tools:layout_height="@dimen/_40sdp" /> 以 Kotlin 为例: 只需将您的函数放入伴生对象中即可。 companion object { @BindingAdapter(" app:availableGradesIndexes", "subject") @JvmStatic fun LinearLayout.bindGradeWithMarks( availableGradesIndexes: Array<Int>) { //.... } } 确保属性应该相同 app:availableGradesIndexes="@{availableGradesIndexes}" 我也遇到了标题中提到的类似问题。我试图通过数据绑定来更改 <include> 标签布局的可见性。像这样 <include android:id="@+id/viewNoData" layout="@layout/layout_no_data" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/quickActionRv" android:visibility="@{case== Case.NoData? View.VISIBLE : View.GONE} /> 解决方案是我必须用 包裹我的子布局 layout_no_data <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> </data> Your content layout </layout> 希望它能帮助别人。

回答 5 投票 0

包括标签和数据绑定

我想使用 include 在同一视图中多次使用我的布局之一。假设我有一个包含一些 TextView 的 custom.xml。 自定义.xml: 我想使用 include 在同一视图中多次使用我的布局之一。假设我有一个 custom.xml,其中包括一些 TextView。 custom.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp" android:orientation="vertical" > <TextView android:id="@+id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/text2" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> 我已多次在parent.xml中包含此布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <include layout="@layout/custom" android:id="@+id/layout1"/> <include layout="@layout/custom" android:id="@+id/layout2"/> </LinearLayout> 现在我想将我的数据模型绑定到此布局,但问题是我不知道如何将两个不同的数据模型绑定到 layout1 和 layout2,因为它们都是从一个布局 引用的custom.xml。据我所知,我可以在我的 xml 布局中添加此标签: <data> <variable name="user" type="com.myproject.model.User"/> </data> 但是我需要将两个不同的数据模型绑定到custom.xml。 我的问题是如何在一个视图中多次包含布局并使用数据绑定将不同的数据传递给它们?例如将数据传递到布局,但不将模型静态绑定到 xml。 我还发现了this问题,它也有同样的问题,但由于数据绑定是在较新版本的android中发布的,我正在寻找一种使用数据绑定解决相同问题的方法。以下是我为了澄清而引用的该问题的部分: 例如,我有一个精心设计的布局想要显示 在我看来是三次。每个实例都需要不同的 价值观。由于 include 基本上是获取 XML 并粘贴它 在这里,我需要更强大的东西。 您可以从 parent.xml 传递该信息 <include layout="@layout/custom" android:id="@+id/layout1" app:user="@{object of user1`}"/> <include layout="@layout/custom" android:id="@+id/layout2" app:user="@{object of user2`}"/> 这里需要从 User 传递 parent.xml 对象 确保 custom.xml 中有 <data> <data> <variable name="user" type="com.myproject.model.User"/> </data> 这里有相关详细解答,参考一下 我们知道如何在 setContentView() 中用作父视图的 XML 上使用 POJO 名称及其类型。如果我们包含资源中的任何布局,我们应该关注 include 标签,如下所示: <?xml version="1.0" encoding="utf-8"?> <layout xmlns:bind="http://schemas.android.com/apk/res-auto"> <data> <variable name="user" type="exapmpe.model.User" /> </data> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> <include layout="@layout/content_main" bind:user="@{user}" /> </android.support.design.widget.CoordinatorLayout> </layout> 这里我们使用 bind 属性来传递对象以在内容屏幕上显示详细信息。请确保两个地方的对象名称应该相同,例如bind:user="@{user}。 content_main.xml 应如下所示: <?xml version="1.0" encoding="utf-8"?> <layout> <data> <variable name="user" type="exapmpe.model.User" /> </data> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/content_main" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.firstName + user.lastName}" /> </RelativeLayout> </layout> 问题是包含的布局不被认为是数据绑定布局,看看这里了解如何解决它 1> 在使用 include 标签的主布局屏幕中添加 xmlns:bind="http://schemas.android.com/apk/res-auto" 此代码位于布局标签下。请查看屏幕截图供您参考。 2> 现在在您的 include 标签下添加 bind:includeLayoutViewModel="@{viewModel}" (在本例中添加您声明的 ViewModel 名称)有关更多信息,请查看屏幕截图 3> 现在,在您包含的布局屏幕中,在此处调用 ViewModel 以供参考,检查下面的屏幕截图(在屏幕截图中,有 TestViewModel 代表您提到您在主布局屏幕中声明的视图模型)

回答 4 投票 0

数据绑定包括布局

尝试使用数据绑定动态设置布局,但我似乎无法让三元运算符正常工作。一定是缺少转义字符什么的。 尝试使用数据绑定动态设置布局,但我似乎无法让三元运算符正常工作。一定是缺少转义字符什么的。 <include android:id="@+id/setting" bind:settingsViewModel="@{settingsViewModel}" layout="@{settingsViewModel.configFlag ? @layout/settings_v1 :@layout/settings_v2}" /> 看起来很简单,但错误为“****/数据绑定错误****msg:包含的值...必须以@layout/开头。” 答案是你不能这样做。布局是之前调用的,所以这个逻辑不能提前完成。 您只能通过包含多个文件并根据您的值分别切换可见性来解决此问题。 可以在这里找到一个例子: https://stackoverflow.com/a/43289414/11544951 如果两种布局的视图模型相同,则效果很好。 如果不是,请查看我对此问题的解决方案: 如果视图模型属于具有数据绑定的特定子类型,如何才能将一种布局包含在另一种布局中?

回答 2 投票 0

如果视图模型属于具有数据绑定的特定子类型,如何才能将一种布局包含在另一种布局中?

我有一个复杂的布局,如果视图模型属于特定子类型,则应仅包含另一个布局。 (例如,我有四种类型的条目,其中一种具有其他人拥有的特殊布局......

回答 1 投票 0

Android Studio 的数据绑定模板?

我决定在我的 Android 项目中使用 DataBinding 库。是否有任何插件/代码模板可安装到 Android Studio 中以获取使用 Android 添加的新活动/片段等...

回答 5 投票 0

Android Studio 4.0.1:构建失败:选项“android.databinding.enableV2”已弃用

我最近升级到 Android Studio 4.0.1,但我的构建不断失败,并显示以下消息: 选项“android.databinding.enableV2”已弃用。 当前默认值为“true”。 已被删除...

回答 3 投票 0

带有正则表达式的 Android 数据绑定 TextField

我正在使用带有 XML 数据绑定的 M3 TextField。我想将输入发送到 ViewModel,如果有效,文本字段的文本应等于此输入,否则 TextField 的文本不应更改。 这是 XML...

回答 1 投票 0

片段中第一个调用的方法是 onDestroy() 而不是 onAttach()

我正在使用导航组件和数据绑定,一切都很好,但是当涉及到片段生命周期程序时,它变得有点奇怪。当我在目的地(片段)并导航到另一个

回答 0 投票 0

如何使用 Kotlin 中的按钮在 View 中使用 Viewmodel 中的内部类?

我尝试使用 https://developer.android.com/guide/topics/media/mediarecorder 与 MVVM 和数据绑定制作一个录音机应用程序。我在视图模型中有 AudioRecordTest 类,但不知道如何使用我...

回答 0 投票 0

Android 数据绑定:构建项目时出错

我有这个数据绑定类,我在 RegistrationViewModel 中用于我的注册屏幕: 类 RegisterData : BaseObservable() { @get:可绑定 变种电子邮件:字符串? = 空 集合(

回答 0 投票 0

Android 数据绑定不更新

我正在尝试根据我的 CheckBox 是否被选中来显示一个面板,我想在纯 XML 中执行此操作,因为它只是一个不需要任何特定模型属性的可视绑定。 我明白了...

回答 0 投票 0

使用 DataBinding 和 LiveData 更新 Recyclerview 数据项

将项目添加到回收站视图并处理增量更新 我已经有了一个可行的解决方案。

回答 0 投票 0

将 ArrayList<SpannableStringBuilder> 数据绑定到 TextView?

我正在尝试在 TextView 中模拟 Wyse60 终端。我当前的设计将输入流解码为 ArrayList,然后再将它们全部连接到 master

回答 0 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.