如何在回收视图 Kotlin 中更新数据对象的 editText

How to update editText for data object in recycle view Kotlin

我是 android studio 的新手,1 个月前刚开始学习它。

我目前正在尝试编写具有数据列表 class 的应用程序,其中包含名称、价格、数量和单位成本。 我已经完成了回收视图,但我面临的问题是每当用户在数据中输入数量时如何更新 editText 值 classs

下面是我的数据class代码

data class food (val food: String, val price: Int, var quantity: Int, var cost: Int = price*quantity)

object ABC {
var food_List = listOf<food>(
    ABC ("A", 28 ,5) ,
    ABC ("B", 28, 0)
)}   

下面是我的回收视图适配器

class customAdaptor (val context: Context, val food_List:List<food>):RecyclerView.Adapter<customAdaptor.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val v = LayoutInflater.from(context).inflate(R.layout.list_layout,parent, false)
    return ViewHolder(v)
}

override fun getItemCount(): Int {
    return food_List.size
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val listused=  food_List[position]
    holder.setData(listused,position)
}

inner class ViewHolder (itemView: View): RecyclerView.ViewHolder(itemView) {

    fun setData(listused: food?, pos: Int) {
        itemView.listFoodName.text = listused!!.food
        itemView.listUnitPrice.text =listused.price.toString()
        itemView.listUnitTotalPrice.text=listused.cost.toString()


    }
}}

以下是我的主要活动

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_page_budget)

    val layoutManager = LinearLayoutManager(this)
    layoutManager.orientation = LinearLayoutManager.VERTICAL
    recyclerview.layoutManager = layoutManager


    val adapter = customAdaptor(this, ABC.food_List)
    recyclerview.adapter = adapter}

下面是我的卡片视图布局。

<androidx.cardview.widget.CardView
    android:id="@+id/cardView"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="270dp"
            android:layout_height="wrap_content"
            android:textAlignment="center"
            android:id="@+id/listFoodName"/>
        <TextView
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:textAlignment="center"
            android:id="@+id/listUnitPrice"/>
         <EditText
                  android:layout_width="50dp"
                  android:layout_height="wrap_content"
                  android:textAlignment="center"
                  android:inputType="numberDecimal"
                  android:id="@+id/listQuantity"/>
        <TextView
                  android:layout_width="50dp"
                  android:layout_height="wrap_content"
                  android:textAlignment="center"
                  android:id="@+id/listUnitTotalPrice"/> -->

    </LinearLayout>
</androidx.cardview.widget.CardView>

然后我不知道怎么写更新的editText。 请帮忙。非常感谢。

你应该使用这个:

editText.afterTextChanged{doSomethingWithText(it)}

你的代码应该是这样的:

fun setData(listused: food?, pos: Int) {
    itemView.listFoodName.text =listused!!.food
    itemView.listUnitPrice.text =listused.price.toString()         
    itemView.listUnitTotalPrice.text=listused.cost.toString()
    itemView.listQuantity.afterTextChanged { 
        listused?.quantity = it.toInt()
        itemView.listUnitTotalPrice.text=listused.cost.toString()
    }
}