如何使用 RecyclerView 获取用户的项目列表

问题描述 投票:0回答:1

所以,问题陈述是我想实现一个功能,用户可以根据需要在列表中添加和删除任意数量的项目。我想到在每个视图中使用带有 edittext 的 RecyclerView 并处理所有视图的状态并在数据状态发生变化时保存数据。

到目前为止我已经在 CheckListAdapter 中尝试过这个:

import android.text.Editable
import android.view.LayoutInflater
import android.view.ViewGroup
import android.view.inputmethod.EditorInfo
import androidx.core.widget.addTextChangedListener
import androidx.recyclerview.widget.RecyclerView
import com.app.dynamicrv.databinding.CheckListItemBinding

class CheckListAdapter
     : RecyclerView.Adapter<CheckListAdapter.ViewHolder>() {

     private val checkListItems = arrayListOf("")

    inner class ViewHolder(val binding: CheckListItemBinding) :
        RecyclerView.ViewHolder(binding.root)

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder(
            CheckListItemBinding.inflate(
                LayoutInflater.from(parent.context),
                parent, false
            )
        )
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val index = checkListItems[position]

        holder.binding.checkListEt.setText(index)

        holder.binding.checkListEt.addTextChangedListener {text: Editable? ->
            if ( position < checkListItems.size)
                checkListItems[position] = text.toString()
        }

        holder.binding.checkListEt.setOnEditorActionListener { v, actionId, event ->
            if (actionId == EditorInfo.IME_ACTION_DONE){
                checkListItems.add("")
                holder.binding.checkListEt.setSelection(0)
                
                notifyItemInserted(checkListItems.size)
            }
            true
        }

    }

    override fun getItemCount() = checkListItems.size


    fun getListItems() : List<String>{
        return checkListItems
    }
}

我期望用户可以通过actionDone在recyclerView中输入另一个字段。但它并没有按预期工作。

android-recyclerview androidx
1个回答
0
投票

您遇到的问题可能源于 EditText 的 setOnEditorActionListener 添加新项目而没有正确更新用户界面。当“IME_ACTION_DONE”事件发生时,您将一个新项目添加到列表中并调用notifyItemInserted,但EditText可能会失去焦点或无法正确重置,从而导致意外问题。

要解决此问题,请确保 EditText 在添加新项目后正确重新获得焦点。您可能还需要在项目插入后显式处理焦点,以保证无缝的用户体验。这是修改后的方法:

  1. 添加新项目。
  2. 清除或重置 EditText 字段。
  3. 请求再次将焦点放在 EditText 上。
© www.soinside.com 2019 - 2024. All rights reserved.