首页 > 解决方案 > 数据绑定在 recylerView 中显示带有项目名称的索引

问题描述

我是 android 中数据绑定的新手,我正在尝试用一些项目加载一个 recyclerview。假设我有一个项目列表,我想显示项目名称以及自动递增的索引号。

我知道如何显示项目名称,但我一直坚持如何显示自动递增的索引号。这是我的 xml 代码

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:bind="http://schemas.android.com/apk/res-auto"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="ean"
            type="com.xpetize.smartshop.models.EAN" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="5dp">

        <android.support.v7.widget.CardView
            bind:contentPadding="5dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <LinearLayout
                android:weightSum="10"
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <TextView
                    android:id="@+id/index"
                    android:text="???????????????????"
                    android:textColor="#000"
                    android:layout_width="0dp"
                    android:layout_weight="1"
                    android:layout_height="wrap_content"/>

                <TextView
                    android:text="@{ean.itemName}"
                    android:textColor="#000"
                    android:id="@+id/item_name"
                    android:layout_width="0dp"
                    android:layout_weight="9"
                    android:layout_height="wrap_content"/>
            </LinearLayout>
        </android.support.v7.widget.CardView>

    </LinearLayout>
</layout>

标签: androidandroid-recyclerviewandroid-databinding

解决方案


我不完全确定视图本身内部需要什么索引。有几种方法可以在重要时在代码中获取索引。

但是,您可以像这样简单地将变量添加到您的 xml:

<variable name="index" type="int"/>

然后只需将其设置在您的适配器中

override fun onBindViewHolder(holder: BindingHolder, position: Int) {
    val model = data[position]

    holder.binding.setVariable(bindingModelId, model)
    holder.binding.index = position

    setupRowClickHandler(holder, model, position)

    holder.binding.executePendingBindings()
}

然后在你的xml中使用它。

            <TextView
                android:id="@+id/index"
                android:text="@{index}"
                android:textColor="#000"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"/>

推荐阅读