Аналогично Сохранение содержимого EditText в RecyclerView , у меня есть реализация пары EditTexts для заполнения внутри каждой строки RecyclerView. Но моя переменная позиции внутри моего TextWatcher всегда возвращает 0, даже после вызова функции updatePosition.
Lod.d в afterTextChanged () на обоих наблюдателях всегда показывает, что позиция равна 0, даже после заполнения editText на 3-й позиции.
Я вижу, что updatePosition переходит от 0 к areaimportadas.size во время функции onBindViewHolder, но это не происходит для onTextChanged.
class importItemsAdapter (val областейImportadas: MutableList, val inclinaLida: MutableList, val desvLido: MutableList): RecyclerView.Adapter () {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val cellForRow = layoutInflater.inflate(R.layout.import_items,parent,false)
return CustomViewHolder(cellForRow)
}
override fun getItemCount(): Int {
return areasImportadas.size
}
override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {
holder.itemView.importNum.text = (position+1).toString()
holder.itemView.importArea.text = areasImportadas[position]
Watcher1().updatePosition(holder.adapterPosition)
Watcher2().updatePosition(holder.adapterPosition)
holder.itemView.importInclina.addTextChangedListener(Watcher1())
holder.itemView.importDesv.addTextChangedListener(Watcher2())
}
class CustomViewHolder(view: View): RecyclerView.ViewHolder(view)
private inner class Watcher1 : TextWatcher {
var position = 0
fun updatePosition(positionExt: Int) {
this.position = positionExt
Log.d("Registro", this.position.toString())
}
override fun afterTextChanged(arg0: Editable) {
inclinaLida[position]= arg0.toString()
Log.d("Registro", "Inclinação $position: ${inclinaLida[position]}")
}
override fun beforeTextChanged(arg0: CharSequence, arg1: Int, arg2: Int, arg3: Int) {}
override fun onTextChanged(s: CharSequence, a: Int, b: Int, c: Int) {
}
}
private inner class Watcher2 : TextWatcher {
var position = 0
fun updatePosition(positionExt: Int) {
position = positionExt
Log.d("Registro", position.toString())
}
override fun afterTextChanged(arg0: Editable) {
Log.d("Registro", "Desvio ${position}: ${desvLido[position]}")
}
override fun beforeTextChanged(arg0: CharSequence, arg1: Int, arg2: Int, arg3: Int) {
}
override fun onTextChanged(s: CharSequence, a: Int, b: Int, c: Int) {
desvLido[position]=s.toString()
}
}
}
Мне нужно было иметь возможность хранить каждый контент EditText в нужном месте в обоих списках (desvLido и inclinaLida)