com.google.gwt.view.client

## Class AsyncDataProvider<T>

- java.lang.Object
- - com.google.gwt.view.client.AbstractDataProvider<T>
  - - com.google.gwt.view.client.AsyncDataProvider<T>

Type Parameters:
  `T` - the data type of records in the list

All Implemented Interfaces:
  ProvidesKey<T>

    public abstract class AsyncDataProvider<T>
    extends AbstractDataProvider<T>

An implementation of `AbstractDataProvider` that allows the data to be modified.

### Example

>     public class AsyncDataProviderExample implements EntryPoint {

>       /**
>        * A custom {@link AsyncDataProvider}.
>        */
>       private static class MyDataProvider extends AsyncDataProvider<String> {
>         /**
>          * {@link #onRangeChanged(HasData)} is called when the table requests a new
>          * range of data. You can push data back to the displays using
>          * {@link #updateRowData(int, List)}.
>          */
>         @Override
>         protected void onRangeChanged(HasData<String> display) {
>           // Get the new range.
>           final Range range = display.getVisibleRange();

>           /*
>            * Query the data asynchronously. If you are using a database, you can
>            * make an RPC call here. We'll use a Timer to simulate a delay.
>            */
>           new Timer() {
>             @Override
>             public void run() {
>               // We are creating fake data. Normally, the data will come from a
>               // server.
>               int start = range.getStart();
>               int length = range.getLength();
>               List<String> newData = new ArrayList<String>();
>               for (int i = start; i < start + length; i++) {
>                 newData.add("Item " + i);
>               }

>               // Push the data to the displays. AsyncDataProvider will only update
>               // displays that are within range of the data.
>               updateRowData(start, newData);
>             }
>           }.schedule(3000);
>         }
>       }

>       public void onModuleLoad() {
>         // Create a CellList.
>         CellList<String> cellList = new CellList<String>(new TextCell());

>         // Create a data provider.
>         MyDataProvider dataProvider = new MyDataProvider();

>         // Add the cellList to the dataProvider.
>         dataProvider.addDataDisplay(cellList);

>         // Create paging controls.
>         SimplePager pager = new SimplePager();
>         pager.setDisplay(cellList);

>         // Add the widgets to the root panel.
>         VerticalPanel vPanel = new VerticalPanel();
>         vPanel.add(pager);
>         vPanel.add(cellList);
>         RootPanel.get().add(vPanel);
>       }
>     }

### Constructor Summary

Constructors
`protected` `AsyncDataProvider()` Constructs an AsyncDataProvider without a key provider.
`protected` `AsyncDataProvider(ProvidesKey<T> keyProvider)` Constructs an AsyncDataProvider with the given key provider.

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `updateRowCount(int size, boolean exact)` Inform the displays of the total number of items that are available.
`void` `updateRowData(int start, java.util.List<T> values)` Inform the displays of the new data.

### Methods inherited from class com.google.gwt.view.client.AbstractDataProvider

`addDataDisplay, getDataDisplays, getKey, getKeyProvider, getRanges, onRangeChanged, removeDataDisplay, updateRowData`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### AsyncDataProvider

    protected AsyncDataProvider()

Constructs an AsyncDataProvider without a key provider.

#### AsyncDataProvider

    protected AsyncDataProvider(ProvidesKey<T> keyProvider)

Constructs an AsyncDataProvider with the given key provider.

Parameters:
  `keyProvider` - an instance of ProvidesKey<T>, or null if the record object should act as its own key

### Method Detail

#### updateRowCount

    public void updateRowCount(int size,
                               boolean exact)

Description copied from class: `AbstractDataProvider`
Inform the displays of the total number of items that are available.

Overrides:
  `updateRowCount` in class `AbstractDataProvider<T>`
Parameters:
  `size` - the new total row count
  `exact` - true if the count is exact, false if it is an estimate

#### updateRowData

    public void updateRowData(int start,
                              java.util.List<T> values)

Description copied from class: `AbstractDataProvider`
Inform the displays of the new data.

Overrides:
  `updateRowData` in class `AbstractDataProvider<T>`
Parameters:
  `start` - the start index
  `values` - the data values