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

bsxbgnwa  于 2024-01-04  发布在  Android
关注(0)|答案(5)|浏览(296)

我试图在数据绑定布局中声明一个变量,它的类型是整数数组,但我在构建项目时出错
找不到<android.widget.LinearLayout app:availableGradesIndexes>接受参数类型“int[]”的setter
如果绑定适配器提供了setter,请检查适配器的注解是否正确,参数类型是否匹配。
XML中的变量声明

  1. <variable
  2. name="availableGradesIndexes"
  3. type="int[]" />
  4. <variable
  5. name="subject"
  6. type="Subject" />

字符串
所述绑定适配器

  1. @BindingAdapter("availableGradesIndexes", "subject")
  2. fun LinearLayout.bindGradeWithMarks(availableGradesIndexes: Array<Int>) {
  3. //....
  4. }


使用

  1. <LinearLayout
  2. android:layout_width="0dp"
  3. android:layout_height="wrap_content"
  4. android:orientation="horizontal"
  5. app:subjct="@{subject}"
  6. app:availableGradesIndexes="@{availableGradesIndexes}"
  7. tools:layout_height="@dimen/_40sdp" />

我还尝试了什么

我试图像fun LinearLayout.bindGradeWithMarks(availableGradesIndexes: IntArray)那样将绑定适配器方法的类型声明到IntArray
我也尝试了List<Int>,如fun LinearLayout.bindGradeWithMarks(availableGradesIndexes: List<Int>)和变量类型List&lt;Int&gt;
我还尝试将绑定变量类型设置为IntegerInteger[]以及List&lt;Integer&gt;

所以问题是如何用绑定适配器绑定一个整型列表或数组?!

koaltpgm

koaltpgm1#

我也遇到了类似的问题,如标题所述。我试图通过<include>标签布局的数据绑定来更改可见性,如下所示:

  1. <include
  2. android:id="@+id/viewNoData"
  3. layout="@layout/layout_no_data"
  4. android:layout_width="0dp"
  5. android:layout_height="wrap_content"
  6. app:layout_constraintBottom_toBottomOf="parent"
  7. app:layout_constraintEnd_toEndOf="parent"
  8. app:layout_constraintStart_toStartOf="parent"
  9. app:layout_constraintTop_toBottomOf="@+id/quickActionRv"
  10. android:visibility="@{case== Case.NoData? View.VISIBLE : View.GONE}
  11. />

字符串
解决方案是,我必须将子布局layout_no_data Package 为

  1. <layout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:app="http://schemas.android.com/apk/res-auto">
  3. <data>
  4. </data>
  5. Your content layout
  6. </layout>


希望它能帮助某人。

展开查看全部
pnwntuvh

pnwntuvh2#

这是因为Kotlin中的Array是Java中的Array []。
尝试在Java中使用IntArray,它将是int[]。
我尝试了你的例子与IntArray和它的作品。

  1. @BindingAdapter("availableGradesIndexes")
  2. fun LinearLayout.bindGradeWithMarks( availableGradesIndexes: IntArray ) {
  3. }

字符串
你能展示你的布局XML吗?

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <layout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto">
  4. <data>
  5. <variable
  6. name="availableGradesIndexes"
  7. type="int[]" />
  8. </data>
  9. <LinearLayout
  10. android:layout_width="0dp"
  11. android:layout_height="wrap_content"
  12. android:orientation="horizontal"
  13. app:availableGradesIndexes="@{availableGradesIndexes}"
  14. tools:layout_height="match_parent" />
  15. </layout>

展开查看全部
flvlnr44

flvlnr443#

你可以使用List来代替int[],但这需要将List类导入布局,以便能够将其用作availableGradesIndexes变量的type

  1. <data>
  2. <import type="java.util.List" />
  3. <variable
  4. name="availableGradesIndexes"
  5. type="List&lt;Integer&gt;" />
  6. </data>

字符串
然后,您可以使用List<Int>将其应用于BindingAdapter:

  1. @BindingAdapter("availableGradesIndexes")
  2. fun LinearLayout.bindGradeWithMarks(availableGradesIndexes: List<Int>) {
  3. //....
  4. Log.d("LOG_TAG", "bindGradeWithMarks: $availableGradesIndexes") // For testing
  5. }


如果你想使用int[]数组;不需要导入:

  1. <data>
  2. <variable
  3. name="availableGradesIndexes"
  4. type="int[]" />
  5. </data>


适配器:

  1. @BindingAdapter("availableGradesIndexes")
  2. @JvmStatic
  3. fun LinearLayout.bindGradeWithMarks(availableGradesIndexes: IntArray) {
  4. //....
  5. Log.d("LOG_TAG", "bindGradeWithMarks: ${availableGradesIndexes.toList()}")
  6. }

更新:

Cannot find a setter for <android.widget.LinearLayout app:availableGradesIndexes> that accepts parameter type 'java.util.List<java.lang.Integer>'
这意味着BidningAdapter方法在布局中无法识别;因此只需确保将其添加到伴随对象中,并由@JvmStatic注解:

  1. class BindingAdapters {
  2. companion object {
  3. @BindingAdapter("availableGradesIndexes")
  4. @JvmStatic
  5. fun LinearLayout.bindGradeWithMarks(availableGradesIndexes: List<Int>) {
  6. //....
  7. Log.d("LOG_TAG", "bindGradeWithMarks: $availableGradesIndexes")
  8. }
  9. }
  10. }

展开查看全部
e3bfsja2

e3bfsja24#

这个问题是在另一个属性名称,我不知道为什么错误消息没有提到它!!

  1. <LinearLayout
  2. android:layout_width="0dp"
  3. android:layout_height="wrap_content"
  4. android:orientation="horizontal"
  5. app:subjct="@{subject}" //the attribute name was messing a letter (subject)
  6. app:availableGradesIndexes="@{availableGradesIndexes}"
  7. tools:layout_height="@dimen/_40sdp" />

字符串

xnifntxz

xnifntxz5#

在Kotlin案例中:
1.简单地把你的函数放在同伴对象中,就像这样。

  1. companion object {
  2. @BindingAdapter(" app:availableGradesIndexes", "subject")
  3. @JvmStatic fun LinearLayout.bindGradeWithMarks(
  4. availableGradesIndexes: Array<Int>) {
  5. //....
  6. }
  7. }

字符串
1.确保属性应相同

  1. app:availableGradesIndexes="@{availableGradesIndexes}"

展开查看全部

相关问题