Обновите Recycler View Child любым действием на другого ребенка - PullRequest
0 голосов
/ 03 апреля 2020

Я борюсь с одной функцией, которую мне нужно реализовать в представлении переработчика, мне нужно обновить несколько дочерних элементов на основе действий, выполняемых с любым дочерним элементом.

Например, у меня есть представление переработчика с, скажем, 10 элементами

  1. Ребенок 1
  2. Ребенок 2
  3. Ребенок 3
  4. -
  5. -
  6. Ребенок 10

Теперь на экране видны только 5 дочерних элементов, а остальные появляются только при прокрутке списка. То, чего я хотел добиться, - это когда я нажимаю child 1 и выполняю действие, это действие возвращает меня к случайному обновлению Child 4 , Child 7 & Child 8

Теперь проблема заключается в том, как обновить дочерний элемент, которого нет в списке.

Я попытался использовать следующее решение: -

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")
    }
}

Проблема заключается в том, что представление переработчика никогда не дает childCount, поскольку 10 дает только 5, которые в настоящее время видны, и, следовательно, обновляется неправильный дочерний элемент.

Есть ли другой способ справиться с этим?

1 Ответ

0 голосов
/ 03 апреля 2020

Вам нужно использовать адаптер RecyclerView, чтобы получить количество детей и обновить всех детей. Адаптер требует переопределить функцию getItemCount, которая должна возвращать общее количество элементов в списке. Попытка получить количество детей или обновить ребенка непосредственно из RecyclerView является неправильным способом.

class TestAdapter(private val data: MutableList<String>) : RecyclerView.Adapter<TestAdapter.ViewHolder>() {
   ...
    override fun getItemCount(): Int {
        return data.size
    }
   ...
}

И чтобы обновить ребенка в вашем RecyclerView, необходимо указать адаптеру выполнить это также. Внутри вашего адаптера вы можете создать метод, который будет индексировать любые другие необходимые данные для обновления дочернего элемента.

class TestAdapter(private val data: MutableList<String>) : RecyclerView.Adapter<TestAdapter.ViewHolder>() {
    ...
    fun updateChildAt(idx: Int, newValue: String) {
        data[idx] = newValue
        notifyItemChanged(idx)
    }
    ...
}
...