# ListAdapter

added in[version 27.1.0](https://developer.android.com/topic/libraries/support-library/revisions)  
belongs to Maven artifact com.android.support:recyclerview-v7:28.0.0-alpha1  
Summary:[Protected Ctors](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/ListAdapter#proctors)\|[Methods](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/ListAdapter#pubmethods)\|[Protected Methods](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/ListAdapter#promethods)\|[Inherited Methods](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/ListAdapter#inhmethods)\|[\[Expand All\]](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/ListAdapter#)  

# ListAdapter

| This package is part of the Android[support library](https://developer.android.com/topic/libraries/support-library)which is no longer maintained. The support library has been superseded by[AndroidX](https://developer.android.com/jetpack/androidx)which is part of[Jetpack](https://developer.android.com/jetpack). We recommend using the AndroidX libraries in all new projects. You should also consider[migrating](https://developer.android.com/jetpack/androidx/migrate)existing projects to AndroidX. To find the AndroidX class that maps to this deprecated class, see the AndroidX support library[class mappings](https://developer.android.com/jetpack/androidx/migrate/class-mappings).

`
public


abstract
class
ListAdapter
`  
`


``

extends `[Adapter](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter)`<VH extends `[RecyclerView.ViewHolder](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder)`>


``


`

|---|---|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| java.lang.Object                                                                                                                                                                                                            |||
| ↳ | [android.support.v7.widget.RecyclerView.Adapter](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter)\<VH extends[android.support.v7.widget.RecyclerView.ViewHolder](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder)\> ||
|   | ↳ | android.support.v7.recyclerview.extensions.ListAdapter\<T, VH extends[android.support.v7.widget.RecyclerView.ViewHolder](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder)\> |

<br />

*** ** * ** ***

[RecyclerView.Adapter](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter)base class for presenting List data in a[RecyclerView](https://developer.android.com/reference/android/support/v7/widget/RecyclerView), including computing diffs between Lists on a background thread.

This class is a convenience wrapper around[AsyncListDiffer](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/AsyncListDiffer)that implements Adapter common default behavior for item access and counting.

While using a LiveData\<List\> is an easy way to provide data to the adapter, it isn't required - you can use[submitList(List)](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/ListAdapter#submitList(java.util.List<T>))when new lists are available.

A complete usage pattern with Room would look like this:  

```
 @Dao
 interface UserDao {
     @Query("SELECT * FROM user ORDER BY lastName ASC")
     public abstract LiveData<List<User>> usersByLastName();
 }

 class MyViewModel extends ViewModel {
     public final LiveData<List<User>> usersList;
     public MyViewModel(UserDao userDao) {
         usersList = userDao.usersByLastName();
     }
 }

 class MyActivity extends AppCompatActivity {
     @Override
     public void onCreate(Bundle savedState) {
         super.onCreate(savedState);
         MyViewModel viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
         RecyclerView recyclerView = findViewById(R.id.user_list);
         UserAdapter<User> adapter = new UserAdapter();
         viewModel.usersList.observe(this, list -> adapter.submitList(list));
         recyclerView.setAdapter(adapter);
     }
 }

 class UserAdapter extends ListAdapter<User, UserViewHolder> {
     public UserAdapter() {
         super(User.DIFF_CALLBACK);
     }
     @Override
     public void onBindViewHolder(UserViewHolder holder, int position) {
         holder.bindTo(getItem(position));
     }
     public static final DiffUtil.ItemCallback<User> DIFF_CALLBACK =
             new DiffUtil.ItemCallback<User>() {
         @Override
         public boolean areItemsTheSame(
                 @NonNull User oldUser, @NonNull User newUser) {
             // User properties may have changed if reloaded from the DB, but ID is fixed
             return oldUser.getId() == newUser.getId();
         }
         @Override
         public boolean areContentsTheSame(
                 @NonNull User oldUser, @NonNull User newUser) {
             // NOTE: if you use equals, your object must properly override Object#equals()
             // Incorrectly returning false here will result in too many animations.
             return oldUser.equals(newUser);
         }
     }
 }
```
Advanced users that wish for more control over adapter behavior, or to provide a specific base class should refer to[AsyncListDiffer](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/AsyncListDiffer), which provides custom mapping from diff events to adapter positions.

<br />

## Summary

|                                                                                                                                                         ### Protected constructors                                                                                                                                                         ||
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| ` `[ListAdapter](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/ListAdapter#ListAdapter(android.support.v7.util.DiffUtil.ItemCallback<T>))`(`[ItemCallback](https://developer.android.com/reference/android/support/v7/util/DiffUtil.ItemCallback)`<T> diffCallback) `                              |
| ` `[ListAdapter](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/ListAdapter#ListAdapter(android.support.v7.recyclerview.extensions.AsyncDifferConfig<T>))`(`[AsyncDifferConfig](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/AsyncDifferConfig)`<T> config) ` |

|                                                                                                   ### Public methods                                                                                                    ||
|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ` int`  | ` `[getItemCount](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/ListAdapter#getItemCount())`() ` Returns the total number of items in the data set held by the adapter.   |
| ` void` | ` `[submitList](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/ListAdapter#submitList(java.util.List<T>))`(List<T> list) ` Submits a new list to be diffed, and displayed. |

|                                                              ### Protected methods                                                               ||
|------|--------------------------------------------------------------------------------------------------------------------------------------------|
| ` T` | ` `[getItem](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/ListAdapter#getItem(int))`(int position) ` |

| ### Inherited methods |
|-----------------------|---|
| [![](https://developer.android.com/static/assets/images/styles/disclosure_down.png)](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/ListAdapter#)From class` `[android.support.v7.widget.RecyclerView.Adapter](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter)` ` |------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | ` final void`    | ` `[bindViewHolder](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#bindViewHolder(VH, int))`(VH holder, int position) ` This method internally calls[onBindViewHolder(ViewHolder, int)](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#onBindViewHolder(VH, int))to update the[RecyclerView.ViewHolder](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder)contents with the item at the given position and also sets up some private fields to be used by RecyclerView.                                                                         | | ` final VH`      | ` `[createViewHolder](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#createViewHolder(android.view.ViewGroup, int))`(`[ViewGroup](https://developer.android.com/reference/android/view/ViewGroup.html)` parent, int viewType) ` This method calls[onCreateViewHolder(ViewGroup, int)](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#onCreateViewHolder(android.view.ViewGroup, int))to create a new[RecyclerView.ViewHolder](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder)and initializes some private fields to be used by RecyclerView. | | ` abstract int`  | ` `[getItemCount](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#getItemCount())`() ` Returns the total number of items in the data set held by the adapter.                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | | ` long`          | ` `[getItemId](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#getItemId(int))`(int position) ` Return the stable ID for the item at`position`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | | ` int`           | ` `[getItemViewType](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#getItemViewType(int))`(int position) ` Return the view type of the item at`position`for the purposes of view recycling.                                                                                                                                                                                                                                                                                                                                                                                                                                     | | ` final boolean` | ` `[hasObservers](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#hasObservers())`() ` Returns true if one or more observers are attached to this adapter.                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | | ` final boolean` | ` `[hasStableIds](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#hasStableIds())`() ` Returns true if this adapter publishes a unique`long`value that can act as a key for the item at a given position in the data set.                                                                                                                                                                                                                                                                                                                                                                                                        | | ` final void`    | ` `[notifyDataSetChanged](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#notifyDataSetChanged())`() ` Notify any registered observers that the data set has changed.                                                                                                                                                                                                                                                                                                                                                                                                                                                            | | ` final void`    | ` `[notifyItemChanged](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#notifyItemChanged(int, java.lang.Object))`(int position, Object payload) ` Notify any registered observers that the item at`position`has changed with an optional payload object.                                                                                                                                                                                                                                                                                                                                                                         | | ` final void`    | ` `[notifyItemChanged](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#notifyItemChanged(int))`(int position) ` Notify any registered observers that the item at`position`has changed.                                                                                                                                                                                                                                                                                                                                                                                                                                           | | ` final void`    | ` `[notifyItemInserted](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#notifyItemInserted(int))`(int position) ` Notify any registered observers that the item reflected at`position`has been newly inserted.                                                                                                                                                                                                                                                                                                                                                                                                                   | | ` final void`    | ` `[notifyItemMoved](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#notifyItemMoved(int, int))`(int fromPosition, int toPosition) ` Notify any registered observers that the item reflected at`fromPosition`has been moved to`toPosition`.                                                                                                                                                                                                                                                                                                                                                                                      | | ` final void`    | ` `[notifyItemRangeChanged](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#notifyItemRangeChanged(int, int, java.lang.Object))`(int positionStart, int itemCount, Object payload) ` Notify any registered observers that the`itemCount`items starting at position`positionStart`have changed.                                                                                                                                                                                                                                                                                                                                   | | ` final void`    | ` `[notifyItemRangeChanged](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#notifyItemRangeChanged(int, int))`(int positionStart, int itemCount) ` Notify any registered observers that the`itemCount`items starting at position`positionStart`have changed.                                                                                                                                                                                                                                                                                                                                                                     | | ` final void`    | ` `[notifyItemRangeInserted](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#notifyItemRangeInserted(int, int))`(int positionStart, int itemCount) ` Notify any registered observers that the currently reflected`itemCount`items starting at`positionStart`have been newly inserted.                                                                                                                                                                                                                                                                                                                                            | | ` final void`    | ` `[notifyItemRangeRemoved](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#notifyItemRangeRemoved(int, int))`(int positionStart, int itemCount) ` Notify any registered observers that the`itemCount`items previously located at`positionStart`have been removed from the data set.                                                                                                                                                                                                                                                                                                                                             | | ` final void`    | ` `[notifyItemRemoved](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#notifyItemRemoved(int))`(int position) ` Notify any registered observers that the item previously located at`position`has been removed from the data set.                                                                                                                                                                                                                                                                                                                                                                                                 | | ` void`          | ` `[onAttachedToRecyclerView](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#onAttachedToRecyclerView(android.support.v7.widget.RecyclerView))`(`[RecyclerView](https://developer.android.com/reference/android/support/v7/widget/RecyclerView)` recyclerView) ` Called by RecyclerView when it starts observing this Adapter.                                                                                                                                                                                                                                                                                                  | | ` abstract void` | ` `[onBindViewHolder](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#onBindViewHolder(VH, int))`(VH holder, int position) ` Called by RecyclerView to display the data at the specified position.                                                                                                                                                                                                                                                                                                                                                                                                                               | | ` void`          | ` `[onBindViewHolder](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#onBindViewHolder(VH, int, java.util.List<java.lang.Object>))`(VH holder, int position, List<Object> payloads) ` Called by RecyclerView to display the data at the specified position.                                                                                                                                                                                                                                                                                                                                                                      | | ` abstract VH`   | ` `[onCreateViewHolder](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#onCreateViewHolder(android.view.ViewGroup, int))`(`[ViewGroup](https://developer.android.com/reference/android/view/ViewGroup.html)` parent, int viewType) ` Called when RecyclerView needs a new[RecyclerView.ViewHolder](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder)of the given type to represent an item.                                                                                                                                                                                             | | ` void`          | ` `[onDetachedFromRecyclerView](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#onDetachedFromRecyclerView(android.support.v7.widget.RecyclerView))`(`[RecyclerView](https://developer.android.com/reference/android/support/v7/widget/RecyclerView)` recyclerView) ` Called by RecyclerView when it stops observing this Adapter.                                                                                                                                                                                                                                                                                               | | ` boolean`       | ` `[onFailedToRecycleView](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#onFailedToRecycleView(VH))`(VH holder) ` Called by the RecyclerView if a ViewHolder created by this Adapter cannot be recycled due to its transient state.                                                                                                                                                                                                                                                                                                                                                                                            | | ` void`          | ` `[onViewAttachedToWindow](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#onViewAttachedToWindow(VH))`(VH holder) ` Called when a view created by this adapter has been attached to a window.                                                                                                                                                                                                                                                                                                                                                                                                                                  | | ` void`          | ` `[onViewDetachedFromWindow](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#onViewDetachedFromWindow(VH))`(VH holder) ` Called when a view created by this adapter has been detached from its window.                                                                                                                                                                                                                                                                                                                                                                                                                          | | ` void`          | ` `[onViewRecycled](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#onViewRecycled(VH))`(VH holder) ` Called when a view created by this adapter has been recycled.                                                                                                                                                                                                                                                                                                                                                                                                                                                              | | ` void`          | ` `[registerAdapterDataObserver](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#registerAdapterDataObserver(android.support.v7.widget.RecyclerView.AdapterDataObserver))`(`[RecyclerView.AdapterDataObserver](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.AdapterDataObserver)` observer) ` Register a new observer to listen for data changes.                                                                                                                                                                                                                                              | | ` void`          | ` `[setHasStableIds](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#setHasStableIds(boolean))`(boolean hasStableIds) ` Indicates whether each item in the data set can be represented with a unique identifier of type[Long](https://developer.android.com/reference/java/lang/Long).                                                                                                                                                                                                                                                                                                                                           | | ` void`          | ` `[unregisterAdapterDataObserver](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter#unregisterAdapterDataObserver(android.support.v7.widget.RecyclerView.AdapterDataObserver))`(`[RecyclerView.AdapterDataObserver](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.AdapterDataObserver)` observer) ` Unregister an observer currently listening for data changes.                                                                                                                                                                                                                                 | ||
| [![](https://developer.android.com/static/assets/images/styles/disclosure_down.png)](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/ListAdapter#)From class` java.lang.Object ` |-------------------|-------------------------------| | ` Object`         | ` clone() `                   | | ` boolean`        | ` equals(Object arg0) `       | | ` void`           | ` finalize() `                | | ` final Class<?>` | ` getClass() `                | | ` int`            | ` hashCode() `                | | ` final void`     | ` notify() `                  | | ` final void`     | ` notifyAll() `               | | ` String`         | ` toString() `                | | ` final void`     | ` wait(long arg0, int arg1) ` | | ` final void`     | ` wait(long arg0) `           | | ` final void`     | ` wait() `                    | ||

## Protected constructors

### ListAdapter

added in[version 27.1.0](https://developer.android.com/topic/libraries/support-library/revisions)  

```
ListAdapter (ItemCallback<T> diffCallback)
```

<br />

<br />

|              Parameters               ||
|----------------|-----------------------|
| `diffCallback` | `ItemCallback` <br /> |

### ListAdapter

added in[version 27.1.0](https://developer.android.com/topic/libraries/support-library/revisions)  

```
ListAdapter (AsyncDifferConfig<T> config)
```

<br />

<br />

|              Parameters              ||
|----------|----------------------------|
| `config` | `AsyncDifferConfig` <br /> |

## Public methods

### getItemCount

added in[version 27.1.0](https://developer.android.com/topic/libraries/support-library/revisions)  

```
int getItemCount ()
```

Returns the total number of items in the data set held by the adapter.

<br />

|                         Returns                          ||
|-------|---------------------------------------------------|
| `int` | The total number of items in this adapter. <br /> |

### submitList

added in[version 27.1.0](https://developer.android.com/topic/libraries/support-library/revisions)  

```
void submitList (List<T> list)
```

Submits a new list to be diffed, and displayed.

If a list is already being displayed, a diff will be computed on a background thread, which will dispatch Adapter.notifyItem events on the main thread.

<br />

|                      Parameters                      ||
|--------|----------------------------------------------|
| `list` | `List`: The new list to be displayed. <br /> |

## Protected methods

### getItem

added in[version 27.1.0](https://developer.android.com/topic/libraries/support-library/revisions)  

```
T getItem (int position)
```

<br />

<br />

|        Parameters        ||
|------------|--------------|
| `position` | `int` <br /> |

|   Returns   ||
|-----|--------|
| `T` | <br /> |

-

  ## Classes

  - [AsyncDifferConfig](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/AsyncDifferConfig)
  - [AsyncDifferConfig.Builder](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/AsyncDifferConfig.Builder)
  - [AsyncListDiffer](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/AsyncListDiffer)
  - [ListAdapter](https://developer.android.com/reference/android/support/v7/recyclerview/extensions/ListAdapter)