找不到接受参数类型“int[]”的xml中的变量声明setter
如果绑定适配器提供设置器,请检查该适配器是否已 注释正确并且参数类型匹配。
<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<Int>
还尝试将绑定变量类型设置为 Integer
和
Integer[]
以及
List<Integer>
所以问题是如何使用绑定适配器绑定整数列表或数组?!
就是Java中的Integer[]。
IntArray 它将是 int[]。
@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<Integer>" />
</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" />
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>
希望它能帮助别人。