personnalisé ListView avec des cases à cocher vérifier les objets non enregistrés
j'ai un BaseAdapter pour ma ListView à l'intérieur d'un fragment qui ressemble à ceci:
public class SelectionMucListAdapter extends BaseAdapter {
private LayoutInflater inflater = null;
Typeface titleFace;
ArrayList<UsersData> innerList = new ArrayList<UsersData>();
public SelectionMucListAdapter(ArrayList<UsersData> users) {
inflater = (LayoutInflater) mainActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
titleFace = Typeface.createFromAsset(mainActivity.getAssets(), "fonts/bradybun.ttf");
innerList = users;
}
@Override
public int getCount() {
return innerList.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int id) {
return id;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.muc_list_item, null);
viewHolder = new ViewHolder();
viewHolder.image = (ImageView)convertView.findViewById(R.id.item_image);
viewHolder.check = (CheckBox)convertView.findViewById(R.id.cb_choose_user);
viewHolder.title = (TextView)convertView.findViewById(R.id.item_text_1);
viewHolder.rating=(RatingBar)convertView.findViewById(R.id.item_text_2);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder)convertView.getTag();
}
viewHolder.title.setTypeface(titleFace);
Bitmap avatar = innerList.get(position).getUserAvatar();//UsersManager.getInstance().getUsers().get(position).getUserAvatar();
if(avatar != null)
viewHolder.image.setImageBitmap(avatar);
viewHolder.title.setText(innerList.get(position).getUserName());
viewHolder.rating.setRating((float)Double.parseDouble(innerList.get(position).getRating()));
viewHolder.check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton cb, boolean isChecked) {
if(cb.isChecked()) {//if this item is checked then add to list
Log.v("CheckBox", "pos: "+position+" checked");
if(!choices.contains(innerList.get(position))) {
choices.add(innerList.get(position));
}
} else {//if its unchecked then remove from list if exist
Log.v("CheckBox", "pos: "+position+" checked");
if(choices.contains(innerList.get(position))) {
choices.remove(innerList.get(position));
}
}
isChecked = cb.isChecked();
}
});
viewHolder.check.setTag(position);
return convertView;
}
}
static class ViewHolder{
ImageView image;
CheckBox check;
TextView title;
RatingBar rating;
}
class CheckState{
boolean isChecked;
UsersData usersData;
public UsersData getUsersData() {
return usersData;
}
public void setUsersData(UsersData usersData) {
this.usersData = usersData;
}
public boolean isChecked() {
return isChecked;
}
public void setChecked(boolean isChecked) {
this.isChecked = isChecked;
}
}
j'ai 20 éléments de la liste, et le problème est que lorsque j'ai vérifié les 2 premiers éléments, par exemple au niveau de l'index [0] et [1], en quelque sorte il a également vérifié automatiquement d'autres éléments à l'index [9] et [10] quand j'ai faites défiler la liste. même cas qui s'est passé, si j'ai vérifié d'autres éléments et il sera vérifié à plusieurs reprises avec le même schéma à chaque fois que j'ai faites défiler la liste.
en fait je ne sais pas ce qui se passe, donc je veux vous demander si quelqu'un ici peut arrêter ce désordre. Merci!!!!
imprimer les articles quand u r en cliquant sur la liste.
Veuillez consulter ce lien, Il est utile.. lalit3686.blogspot.dans/2012/06/...
Veuillez consulter ce lien, Il est utile.. lalit3686.blogspot.dans/2012/06/...
OriginalL'auteur user724861 | 2013-08-30
Vous devez vous connecter pour publier un commentaire.
Votre Coutume Adaptateur doit mettre en œuvre
CompoundButton.OnCheckedChangeListener
. Utiliser unSparseBooleanArray.
Puis
Ensuite utiliser l'état activé à l'ensemble du texte case à cocher
De Discussion sur le sujet @
https://groups.google.com/forum/?fromgroups#!topic/android-développeurs/No0LrgJ6q2M
Exemple:
Utiliser un
ViewHolder
. L'exemple ci-dessous n'utilise pas de Vue Titulaire.Il y a un Bouton en bas de l'écran. Lorsque vous activez les cases à cocher des éléments de l'coché les lignes sont affichées dans un toast lorsque vous cliquez sur le bouton du bas.
Utiliser le ci-dessous et de le modifier en fonction de vos besoins.
je l'ai pris à partir de Romain Guy de la solution à partir de l'android developer groupe. Si vous avez une solution alternative le même poste. pour la solution posté, vous devez
SparseBooleanArray
la solution pour l'OP est comme je l'ai dit, il a besoin d'ajouter un champ booléen à son UsersData modèle de données, de faire une cartographie de méthode getView et des cours de mise à jour de ce champ dans la Case port d'écoute
OriginalL'auteur Raghunandan
Je suis actuellement à l'aide de la solution fournie ici:
ListView avec Case de Défilement Problème
il fonctionne pour moi et j'ai changer mon adaptateur classe comme ceci:
- je utiliser 2 arraylists de garder les données: tout d'abord, pour toutes les données et l'autre pour les données que l'utilisateur présentement à la recherche. ainsi, alors que l'utilisateur tape une recherche par mots clés la vérification de l'état sont écoulés entre la première et la deuxième liste de tableaux résultant de la persistance des éléments cochés n'importe quelle position ils sont.
mais merci pour raghunandan, votre réponse est mon coin de pierre pour atteindre une meilleure solution!
OriginalL'auteur user724861
Le truc astuce ici est d'utiliser un booléen tableau avec la taille() = nombre d'éléments listview. Le but est de marquage de l'élément sélectionné, ce qui ne l'est pas. Lorsque vous consultez un objet, mise à jour de son état à la suite de sa position. Espérons que cette aide vous. 🙂
OriginalL'auteur user1593800
En plus de @Raghunandan répondre, Android ré-utilise les points de vue dans le listview pendant le défilement de telle manière que lorsque vous scrollthe affichage de la liste, le dernier point de vue qui est sorti de l'écran est la fenêtre qui va entrer dans l'écran de l'autre côté, de sorte que si 1 et 2 sont vérifiées et les 9 et 10 seront vérifiés après le défilement cela signifie probablement qu'il y a 8 éléments affichés en même temps sur l'écran, tels que le neuvième élément du système android, utilisé le point de vue de la première, de sorte qu'il sera vérifié.
OriginalL'auteur Omar HossamEldin
je pense que cela est utile pour vous dans mon xml je prends textview et la case à cocher.utilisation getView() la méthode comme ça que j'ai mis en place et utiliser bean classe pour la communication entre l'activité et l'adaptateur.
}
qu'est-ce que final Contacts les Contacts=(Contacts) de la liste.get(position);?
OriginalL'auteur Rohit Bandil