Je souhaite utiliser la bibliothèque de liaison de données Android avec un ListView
rempli par un CursorAdapter
personnalisé, mais je n'arrive pas à comprendre comment le faire fonctionner. Je semble une chose si simple à réaliser.Utilisation de la bibliothèque de liaison de données avec CursorAdapter
C'est ce que j'ai maintenant:
public class PlayCursorAdapter extends CursorAdapter {
private List<Play> mPlays;
PlayCursorAdapter(Context context, Cursor cursor) {
super(context, cursor, 0);
mPlays = new ArrayList<>();
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
ListItemPlayBinding binding = ListItemPlayBinding.inflate(LayoutInflater.from(context), parent, false);
Play play = new Play();
binding.setPlay(play);
mPlays.add(play);
return binding.getRoot();
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
int timeIndex = cursor.getColumnIndexOrThrow(PlayEntry.COLUMN_TIME);
...
long time = cursor.getLong(timeIndex);
...
Play play = mPlays.get(cursor.getPosition());
play.setTime(time);
...
}
}
Comportement actuel:
Quand je lance ce code et je défiler vers le bas dans la liste je reçois un IndexOutOfBoundsException
sur les mPlays liste.
Comportement souhaité:
Je veux remplir un ListView
avec les données d'un ContentProvider
en utilisant la bibliothèque de liaison de données et un CursorAdapter
. Est-il même possible d'utiliser la bibliothèque de liaison de données avec un CursorAdapter
? Ou recommandez-vous de toujours utiliser un RecyclerView
et un RecyclerView.Adapter
?
Merci, cette solution a fonctionné. Je cherchais la partie 'DataBindingUtil.getBinding (view)'. Recommandez-vous d'utiliser un 'RecyvlerView.Adapter' au lieu d'un' CursorAdapter' ou est-ce trop pour cette situation? J'ai lu votre article sur Medium sur l'utilisation d'un 'RecyclerView'. –
RecyclerView est un widget plus récent qui gère la plupart des cas d'utilisation de ListView et dispose de fonctionnalités supplémentaires. Vous obtiendrez également la stabilité entre les versions d'Android, car il est entièrement dans la bibliothèque de support. Donc, je dirais qu'il vaut la peine de regarder dans RecyclerView pour les mises en page futures. Cela dit, il n'y a vraiment aucune raison de changer quand quelque chose fonctionne bien pour vous. –