belongs to Maven artifact com.android.support:recyclerview-v7:28.0.0-alpha1
ListAdapter
public
abstract
class
ListAdapter
extends Adapter<VH extends RecyclerView.ViewHolder>
java.lang.Object | ||
↳ | android.support.v7.widget.RecyclerView.Adapter<VH extends android.support.v7.widget.RecyclerView.ViewHolder> | |
↳ | android.support.v7.recyclerview.extensions.ListAdapter<T, VH extends android.support.v7.widget.RecyclerView.ViewHolder> |
RecyclerView.Adapter
base class for presenting List data in a
RecyclerView
, including computing diffs between Lists on a background thread.
This class is a convenience wrapper around 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)
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
, which provides custom mapping from diff events
to adapter positions.
Summary
Protected constructors | |
---|---|
ListAdapter(ItemCallback<T> diffCallback)
|
|
ListAdapter(AsyncDifferConfig<T> config)
|
Public methods | |
---|---|
int
|
getItemCount()
Returns the total number of items in the data set held by the adapter. |
void
|
submitList(List<T> list)
Submits a new list to be diffed, and displayed. |
Protected methods | |
---|---|
T
|
getItem(int position)
|
Inherited methods | |
---|---|
From
class
android.support.v7.widget.RecyclerView.Adapter
| |
From
class
java.lang.Object
|
Protected constructors
ListAdapter
ListAdapter (ItemCallback<T> diffCallback)
Parameters | |
---|---|
diffCallback |
ItemCallback |
ListAdapter
ListAdapter (AsyncDifferConfig<T> config)
Parameters | |
---|---|
config |
AsyncDifferConfig |
Public methods
getItemCount
int getItemCount ()
Returns the total number of items in the data set held by the adapter.
Returns | |
---|---|
int |
The total number of items in this adapter. |
submitList
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.
Parameters | |
---|---|
list |
List : The new list to be displayed.
|