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);
}
}
}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 | |
|---|---|
android.support.v7.widget.RecyclerView.Adapter
| |
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.
|