J'ai cours générique
public abstract class BaseAdapter<T> extends RecyclerView.Adapter {
private List<T> itemsList = new ArrayList<>();
//other override methods
@Override
public long getItemId(int position) {
return position;
}
}
Quelle est la bonne façon de mettre en œuvre getItemId ()? Je pense que return position
comme dans beaucoup d’exemples n’est pas correct.
Créez une interface de base avec une méthode qui retourne un type long
Eg.
interface BaseInterface{
long getId();
}
Changement
abstract class BaseAdapter<T> extends RecyclerView.Adapter
à
abstract class BaseAdapter<T extends BaseInterface> extends RecyclerView.Adapter {
Remarque: La signature a été modifiée en T extends BaseInterface
Remplacer
@Override
public long getItemId(int position) {
return position;
}
avec
@Override
public long getItemId(int position) {
return itemsList.get(position).getId();
}
Dans la liste, vous pouvez uniquement renvoyer l'ID de l'élément disponible sur une ligne spécifique, comme indiqué par Google documents:
getItemId
Obtenez l'identifiant de ligne Associé à la position spécifiée dans la liste.
Mais ce n'est pas le cas avec RecyclerView. Dans RecyclerView, vous devez vous assurer de renvoyer un identifiant unique pour chaque élément ou, en l'absence d'identifiant stable, de renvoyer RecyclerView.NO_ID
(-1). Veuillez vous abstenir de renvoyer des valeurs qui ne sont pas stables. (Une valeur stable serait une valeur unique qui ne change pas même si la position de l'ensemble de données change)