好吧,您可以使用某种计数器简单地遍历列表视图中的元素:
int count = listView.getCount();
for (int i = 0; i < count; i++) {
listView.post(new Runnable() {
@Override
public void run() {
listView.smoothScrollToPosition(i);
}
});
}
// Once the method gets to here, i == count and we're at the last position
// So you can use some logic to scroll back to the top e.g.
// listView.smoothScrollToPosition(0)
而不是 using post()
,您可能想考虑使用一个Timer
对象,因为我相信对于何时执行 post 队列上的 runnable 没有太多控制。
编辑
因此,我设法获得了一个基本但有效的方法,例如使用Timer
固定费率的ScrollTimerTask
//This is an inner class, with i an int in the Activity, starting at 0;
public class ScrollTimerTask extends TimerTask {
@Override
public void run() {
if (i < getListView().getCount()) {
getListView().smoothScrollToPosition(i);
i++;
}
else {
getListView().smoothScrollToPosition(0);
i == 0;
}
}
然后,您要从列表呼叫开始向下移动的位置new Timer().scheduleAtFixedRate(new ScrollTimerTask(), 0, 1000);
。这将在没有延迟后开始滚动,并将每 1000 毫秒安排一次滚动任务。
请注意,这是基本的,当您关闭它时会导致 Activity 崩溃,并连续运行。为了防止崩溃,我建议保留对Timer
对象的引用并调用Timer.cancel()
Activity 的 onPause() 方法。但它是一个起点!