我有一个需要以两种方式迭代的列表,我使用了一个迭代器。
teamIterator = data.listIterator()然后,我使用内置函数next()和前面的迭代。
fun next() {
if (teamIterator.hasNext()) {
selectedTechnician.postValue(teamIterator.next())
}
}
fun previous() {
if (teamIterator.hasPrevious()) {
selectedTechnician.postValue(teamIterator.previous())
}
}这种方法的问题是,当在列表开头单击next时,它必须是两次单击,在执行next并想要返回前一次之后,我必须在前次单击两次,这是不好的行为,有什么方法可以避免next()不返回实际项,并且只返回列表中的下一项?
发布于 2020-08-05 16:24:09
迭代器没有当前元素的概念,所以您总是在元素之间,使用上述算法切换方向将导致重复元素。
您可以使用索引变量来跟踪当前的元素索引,这样在切换方向时总是可以强制进行更改。
//Property
var currentIndex = 0
fun next() {
if (currentIndex < data.lastIndex) {
selectedTechnician.postValue(data[++currentIndex])
}
}
fun previous() {
if (currentIndex > 0) {
selectedTechnician.postValue(data[--currentIndex])
}
}https://stackoverflow.com/questions/63264725
复制相似问题