代码之家  ›  专栏  ›  技术社区  ›  Martin Denion

Kotlin:如何更新RecyclerView的值

  •  0
  • Martin Denion  · 技术社区  · 4 年前

    我想随时更新我的RecyclerView中的一些值。

    这是我的数据类ParameterText:

    data class ParameterText(
        var parameterName: String?,
        var parameterValue: String?
    )
    

    这是我的ViewHolder类ParameterTextViewHolder:

    class ParameterTextViewHolder(itemView: View) : ViewHolder(itemView) {
        val parameterName: TextView = itemView.findViewById(R.id.parameterName)
        val parameterText: TextView = itemView.findViewById(R.id.parameterValue)
    }
    

    这是我的适配器(在我的活动中):

    // Adapter
    private val parametersTextFoundList = emptyDataSourceTyped<ParameterText>()
    

    这是我的RecyclerView设置(也在我的活动中):

    rv_parameters_text.setup {
        withDataSource(parametersTextFoundList)
        withItem<ParameterText, ParameterTextViewHolder>(R.layout.parameter_text) {
            onBind(::ParameterTextViewHolder) { _, item ->
                parameterName.text = item.parameterName
                parameterText.text = item.parameterValue
            }
        }
    }
    

    我试过这个:

    private fun updateValue(index: Int, value: String) {
        parametersTextFoundList[index].parameterValue = value
    }
    

    但它不起作用。我读到我也应该使用notifyDataSetChanged()方法,但我不知道在哪里使用它。你能帮帮我吗?

    0 回复  |  直到 4 年前
        1
  •  1
  •   CSmith    4 年前

    有一整套通知API,包括 notifyItemInserted() , notifyItemRemoved() , notifyItemChanged() ,旨在更有效地更新 RecyclerView .

    在RecyclerView中更改现有行的内容时,使用它会更有效 adapter.notifyItemChanged(row) ,如 notifyDataSetChanged() 将重新加载整个RecyclerView。我推荐:

    private fun updateValue(index: Int, value: String) 
    {
        parametersTextFoundList[index].parameterValue = value
        rv_parameters_text.adapter?.notifyItemChanged(index)
    }
    
        2
  •  1
  •   Mahmoud Omara    4 年前

    您需要使用notifyDataSetChanged()方法进行更新,如下所示

    rv_parameters_text.adapter?.notifyDataSetChanged()