Estoy luchando con una característica que necesito para poner en práctica en vista de reciclaje, es necesario que actualice pocos hijo basándose en la acción realizada en cualquier niño.
Por ejemplo, tengo vista reciclador con digamos 10 artículos
- niño 1
- niño 2
- niño 3
- -
- -
- niño 10
Ahora en un momento en que hay sólo 5 niños que son visibles en la pantalla y el resto de ellos viene sólo cuando se desplaza la lista. Lo que quería lograr es cuando hago clic en niños de 1 y realizar una acción, que me vuelve acción para actualizar al azar niño 4 , Niño 7 y Niño 8
Ahora el problema es cómo puedo actualizar el niño que no es visible en la lista.
He intentado utilizar la solución siguiente: -
val childCount = rvQuestion.childCount
for (i in 0 until childCount) {
val child = rvQuestion.getChildAt(i)
.findViewById<TextInputEditText>(R.id.etQuestion)
val questionHint = child.hint
// list is the list of child that needs to be populated with a hint
if(list.contains(questionHint)) {
child.setText("someValue")
}
}
La cuestión es vista reciclador nunca se da por la childCount como 10 da sólo el 5, que son actualmente visibles y por lo tanto el niño mal están consiguiendo puestas al día.
Cualquier otra forma de manejar esto?
Es necesario utilizar el RecyclerView
adaptador para agarrar el número de niños y de actualizar ninguna niños. El adaptador requiere para anular una getItemCount
función que debe devolver el total de elementos en la lista. El intento de obtener el recuento niño o la actualización de un niño directamente desde el RecyclerView
no es la manera correcta.
class TestAdapter(private val data: MutableList<String>) : RecyclerView.Adapter<TestAdapter.ViewHolder>() {
...
override fun getItemCount(): Int {
return data.size
}
...
}
Y actualizar un niño en el que su RecyclerView
usted necesita decir el adaptador de hacerlo así. Dentro de su adaptador puede crear un método que toma en un índice cualquier otro dato necesario para actualizar un niño.
class TestAdapter(private val data: MutableList<String>) : RecyclerView.Adapter<TestAdapter.ViewHolder>() {
...
fun updateChildAt(idx: Int, newValue: String) {
data[idx] = newValue
notifyItemChanged(idx)
}
...
}