0

我已经实现了一个 ListView 来读取 rss 提要,我想为此列表视图实现一个自动滚动。

我可能会使用类似的东西:

listView.post(new Runnable() {
            @Override
            public void run() {
                listView.smoothScrollToPosition(???);
            }
        });

但是如何顺利阅读所有位置然后从顶部重新开始?

4

2 回答 2

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)

而不是 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() 方法。但它是一个起点!

于 2012-07-29T12:02:13.623 回答
0

添加一个大的页脚/页眉并在到达结尾时跳转到开头 (0) 并重新开始滚动。

于 2012-07-29T11:55:34.877 回答