Как бы я использовал GWT для создания бесконечной панели прокрутки? - PullRequest
5 голосов
/ 25 июня 2009

Под бесконечной прокруткой я подразумеваю, что сначала я загружаю несколько дочерних виджетов, а когда пользователь лениво прокручивает, загружает больше, чтобы заполнить его.

Любые идеи приветствуются.

(в идеале хотелось бы что-то для GWT 1.6 и 1.5)

Ответы [ 2 ]

8 голосов
/ 25 июня 2009

Попробуйте что-то вроде этого:

public static class InfiniteScrollPanel implements ScrollHandler {
    String text = "Lorem ipsum dolor sit amet, consectetuer...";
    ScrollPanel panel = new ScrollPanel(new HTML(text));
    int height = 200;
    int width = 200;

    public InfiniteScrollPanel() {
        panel.setHeight(height);
        panel.setWidth(width);
        panel.addScrollHandler(this);  
    }
    public void onScroll(ScrollEvent event) {
        if (panel.getScrollPosition == height) {
            panel.add(new HTML(text));
        }
    }
}

Что делает этот код: он создает ScrollPanel и добавляет к нему ScrollHandler. В ScrollHandler высота прокрутки сравнивается с высотой панели, а затем добавляет к ней еще одного дочернего элемента.

Я не проверял это, потому что я пишу это на нетбуке, и на нем нет IDE.

6 голосов
/ 09 июля 2009

Мне удалось подтвердить следующие работы в GWT 1.5 как минимум:

final VerticalPanel vp = new VerticalPanel();
for (int i = 0; i < 40; i++) {
    vp.add(new HTML("Oh oh"));
}
final HTML f = new HTML("END");
vp.add(f);

final ScrollPanel panel = new ScrollPanel(vp);
panel.setHeight("20em");
panel.addScrollListener(new ScrollListener() {

    HTML end = f;
    public void onScroll(Widget widget, int scrollLeft, int scrollTop) {

        int finalPos = end.getAbsoluteTop() + end.getOffsetHeight(); 
        int panelPos = panel.getAbsoluteTop() + panel.getOffsetHeight();
        if (finalPos == panelPos) {
            end = new HTML("MORE !!");
            vp.add(end);
        }

    }
});

Обратите внимание, что интересные биты - это расчеты позиций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...