我已经实现了一个ListView来读取rss feed,我想为这个列表视图实现一个自动滚动。
我可能会使用类似的东西:
listView.post(new Runnable() {
@Override
public void run() {
listView.smoothScrollToPosition(???);
}
});
但如何顺利阅读所有位置然后再从顶部开始?
答案 0 :(得分:3)
好吧,您可以使用某种计数器简单地遍历列表视图中的元素:
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)
您可能想要考虑使用post()
对象,而不是使用Timer
,因为我认为对后队列中的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毫秒安排滚动任务。
请注意,这是基本的,当您关闭活动并且连续运行时会使活动崩溃。为防止崩溃,我建议保留对Timer
对象的引用,并在Activity的onPause()方法中调用Timer.cancel()
。但它是一个起点!
答案 1 :(得分:0)
添加一个大的页脚/标题,并在到达开头(0)结束时跳转并重新开始滚动。