Данные повторяются в массиве списков массивов в течение l oop Recylerview Koltin - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь добиться расширяемого recylerveiew в koltin: я пробовал с приведенным ниже кодом:

val DataItems = arrayListOf<faqBody>()
val ChildDataItems = arrayListOf<childItem>()
var ParentDataItem: faqBody
var ChildDataItem: childItem

for (item in 0..5) {
    ParentDataItem = faqBody()
    ParentDataItem.menuText = item.toString()
    for (item1 in 0..2) {
        ChildDataItem = childItem()
        ChildDataItem.menuText = item1.toString()
        ChildDataItems .add(ChildDataItem)
        ParentDataItem.childItem = childlist
    }
    DataItems .add(ParentDataItem)

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

Может ли кто-нибудь помочь избавиться от вышеперечисленного. Пожалуйста, найдите изображение для справки.

enter image description here

1 Ответ

1 голос
/ 03 февраля 2020

Ваш ChildDataItems находится вне области действия * oop. Новые элементы добавляются для первого родительского элемента 2 раза, но затем список остается прежним, и новые элементы добавляются в список, в то время как другие 2 уже находятся там. Таким образом, ваш третий родительский элемент заканчивается списком из 6 дочерних элементов!

Объявите свой список дочерних элементов в области l oop, а не как внешний

val DataItems = arrayListOf<faqBody>()
var ParentDataItem: faqBody
var ChildDataItem: childItem

for (item in 0..5) {
    ParentDataItem = faqBody()
    ParentDataItem.menuText = item.toString()

    val ChildDataItems = arrayListOf<childItem>() // a new list will be created for each parent       

    for (item1 in 0..2) {
        ChildDataItem = childItem()
        ChildDataItem.menuText = item1.toString()
        ChildDataItems .add(ChildDataItem)
        ParentDataItem.childItem = childlist
    }
    DataItems .add(ParentDataItem)
}

PS Имена ваших переменных должны начинаться с букв нижнего регистра, а имена классов / интерфейсов должны начинаться с букв верхнего регистра. Этот стиль кода обычно используется в современной Java / Kotlin production

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...