【发布时间】:2020-12-11 00:37:55
【问题描述】:
这个 bug 似乎无法消除,现在它跟着我去了两个不同的项目(我废弃的第一个项目)。下面是代码:
if(testIterator.hasNext()){
layers.setDrawableByLayerId(R.id.layer1, testIterator.next())
basePicture.setImageDrawable(layers)
}
else{
hairButton.isFocusable = false
layers.setDrawableByLayerId(R.id.layer1,test.first())
basePicture.setImageDrawable(layers)
testIterator = test.iterator()
}
}
“layers”是可绘制文件夹中的layer-list.xml。使用这个迭代器,我正在迭代一个名为“test”的drawables(?)数组。 “测试”中的可绘制对象正在替换我的 layer-list.xml 中的单个可绘制对象。
if 语句的功能是(如前所述),遍历可绘制对象列表(?),如果用户再次单击按钮,则将当前替换为下一个。这应该会在单击按钮时更改屏幕上的图形。
else 语句的功能是在按钮被一直点击到最后一个功能(如重新启动)后返回到数组列表“test”的元素 [0]。
问题: 我必须单击按钮两次才能离开元素 [0] 并开始迭代。之后它不需要双击,至少在它回到元素 [0] 之前不需要。我研究过这个问题,有人说它与“焦点”有关,但我已经广泛尝试了可聚焦性,我认为这不是问题。
我不认为它是这样说的: “basePicture.setImageDrawable(层)” 我认为这不是问题,因为我(认为)我需要这样来更新图像在屏幕上的外观,当我注释掉这一行时,它没有任何区别。
附: 当我进行迭代时,它不会立即显示在屏幕上。我必须单击主页按钮(因此应用程序消失)并重新打开它以查看显示的图形的任何变化。这是我发现的一个新错误,所以我还没有开始真正研究它,但任何关于这是什么的想法都会非常有帮助。谢谢!
【问题讨论】:
-
为什么不使用索引属性而不是迭代器?长期挂在迭代器上并不是很健壮。
-
@Tenfour04 就像一个带有附加到 clicklistener 的中断的“for”循环?
-
我没有想到任何循环。如果没有一些复杂的协程实现,您将无法做到这一点。只需挂上使用的最后一个索引的引用即可。使用时增加它,当它达到集合的大小时滚动它。
标签: java android android-studio kotlin