如何捕获列表字段滚动到底部在黑莓7



我有一个listfield与许多数据,首先我从服务器加载10条记录,我想捕捉事件时,滚动已经移动到底部,我可以从服务器加载更多的记录。

I实现了ScrollChangeListener:

public class DataListScreen extends MainScreen implements ScrollChangeListener {
    public void scrollChanged(Manager manager, int newHorizontalScroll, int newVerticalScroll) {
        System.out.println(getVirtualHeight()); // 480
        System.out.println(getVisibleHeight()); // 480
        System.out.println(newVerticalScroll); // 0 - 1259
    }
}

,但我知道如何获得垂直滚动的最大尺寸?

任何想法?

如果您正在使用ListField,并且您正在通过扩展ListFieldCallback来执行自定义绘画,那么您可以检测drawListRow方法中的一行:

    public void drawListRow(ListField lf, Graphics g, int index, int y, int x) {
        if (lf.isFocus() && lf.getSelectedIndex() == index) {
            //The selected row is bein repainted
            if(index == (lf.getSize() - 1)){
                //The last row is being focused
            }
        }
    }

然后你可以在工作线程中请求新的元素。用加载消息阻塞GUI。

这是解决问题的基本方法。在一个真正的专业应用程序中,当用户即将到达列表的末尾时,你会预先请求一批新的元素(选定的行=列表的大小-适合屏幕的行数)。这样,它可以向下滚动而无需等待。您必须处理失败的请求以及在同一批处理中多个用户发起的请求。

最新更新