所以,问题陈述是我想实现一个功能,用户可以根据需要在列表中添加和删除任意数量的项目。我想到在每个视图中使用带有 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中输入另一个字段。但它并没有按预期工作。
您遇到的问题可能源于 EditText 的 setOnEditorActionListener 添加新项目而没有正确更新用户界面。当“IME_ACTION_DONE”事件发生时,您将一个新项目添加到列表中并调用notifyItemInserted,但EditText可能会失去焦点或无法正确重置,从而导致意外问题。
要解决此问题,请确保 EditText 在添加新项目后正确重新获得焦点。您可能还需要在项目插入后显式处理焦点,以保证无缝的用户体验。这是修改后的方法: