Infinite lazy loading

Even though we have explained lazy loading by using the Grid component, we can use the same backend service method to implement custom UI components that support lazy loading. For example, you can use a VerticalLayout to add sets of, say, 10 components any time the user clicks a load more button at the bottom of the layout. In this case, you would need to keep track of the current offset and keep incrementing it until the service method returns less than 10 items.

The following is a simple UI component that shows how to implement this type of infinite lazy loading:

public class LazyLoadingVerticalLayout extends Composite {

private CssLayout content = new CssLayout();
private Button button = new Button("Load more...");

private int offset;
private int pageSize;

public LazyLoadingVerticalLayout(int pageSize) {
this.pageSize = pageSize;

button.setStyleName(ValoTheme.BUTTON_BORDERLESS_COLORED);

VerticalLayout mainLayout = new VerticalLayout(content, button);
setCompositionRoot(mainLayout);

button.addClickListener(e -> loadMore());
loadMore();
}

public void loadMore() {
List<Call> calls = CallRepository.find(
offset, pageSize, "", new HashMap<>());

if (calls.size() < pageSize) {
button.setVisible(false);
}

calls.stream()
.map(call -> new Label(call.toString()))
.forEach(content::addComponent);

offset += pageSize;
}
}

Notice how the loadMore method keeps adding components to the content layout until there are no more results to add, at which point the Load more... button is hidden from the UI.

The following screenshot shows this component in action:

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset