Перебирать список с помощью next () и previous () - PullRequest
0 голосов
/ 05 августа 2020

У меня есть список, который мне нужно перебрать в обоих направлениях, я использовал итератор

teamIterator = data.listIterator()

, а затем я использовал встроенную функцию next () и previous для итерации

    fun next() {

    if (teamIterator.hasNext()) {
        selectedTechnician.postValue(teamIterator.next())
    }
}

fun previous() {

    if (teamIterator.hasPrevious()) {
        selectedTechnician.postValue(teamIterator.previous())
    }
}

проблема с этим подходом заключается в том, что при щелчке далее в начале списка должно быть два щелчка, также после выполнения следующего и желаемого go предыдущего, я должен дважды щелкнуть по предыдущему, что не является хорошее поведение, есть ли способ избежать того, чтобы next () не возвращал фактический элемент, а возвращал только следующий элемент в списке?

1 Ответ

0 голосов
/ 05 августа 2020

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

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

//Property
var currentIndex = 0

fun next() {
    if (currentIndex < data.lastIndex) {
        selectedTechnician.postValue(data[++currentIndex])
    }
}

fun previous() {
    if (currentIndex > 0) {
        selectedTechnician.postValue(data[--currentIndex])
    }
}
...