Impossible de cocher/décocher CheckedTextView à l'intérieur de getView
Je suis le chargement des contacts du téléphone personnalisé dans un ListView. Chaque ligne est un tel menu LinearLayout contenant un CheckedTextView et un autre TextView.
Je suis d'alimentation de l'affichage de la liste avec un ArrayAdapter. Mon problème est que je ne contrôle pas CheckedTextViews à l'intérieur de getView(). Par exemple, lorsque j'essaie suivantes
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if(row == null){
row = inflater.inflate(layout, parent, false);
}
CheckedTextView checkedTextView = (CheckedTextView) row.findViewById(R.id.checkedTextView);
checkedTextView.setText("A");
checkedTextView.setChecked(true);
return row;
}
Qui est censé vérifier chaque affichage de texte à chaque fois que j'ai faites défiler la liste, mais qui n'est pas le cas. Quelqu'un peut-il me dire comment faire?
EDIT: Il est important de vérifier à l'intérieur de getView(), je ne peux pas vérifier tous les après setListAdapter()
EDIT2: C'est le fichier xml qui montre la vue de chaque ligne
<?xml version="1.0" encoding="utf-8"?>
<com.example.multiplecontacts.CheckableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<CheckedTextView
android:id="@+id/checkedTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:paddingBottom="0dp"
android:text="CheckedTextView"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/subTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Small Text"
android:paddingTop="0dp"
android:textAppearance="?android:attr/textAppearanceSmall" />
</com.example.multiplecontacts.CheckableLinearLayout>
CheckableLinearLayout est une mise en page personnalisée qui s'étend LinearLayout et met en œuvre Vérifiables comme je l'ai dit avant. Et je l'ai pris à partir de ici
pouvez-vous s'il vous plaît poster le xml
Vous l'avez mise en page avec
checkbox
mais lorsque vous appuyez sur la checkbox
n'est pas cochée?À la suite de la bonne réponse de Alex Orlov j'ai fait comme ceci:
public View getView(int position, View convertView, ViewGroup parent) {..... ((ListView) parent).setItemChecked(position, true);....}
OriginalL'auteur Islam Hassan | 2012-09-28
Vous devez vous connecter pour publier un commentaire.
Avez-vous fixé une coche de la propriété pour votre CheckedTextView dans votre mise en page xml?
Par exemple:
android:checkMark="?android:attr/listChoiceIndicatorMultiple
CheckedTextView n'est pas juste une case à cocher avec un texte. Vous devez également noter, que CheckedTextView n'est pas focusable, ou cliquable sans manipulation (car il a été conçu pour ListView et, par conséquent, c'est l'état doit être contrôlé par de ListView
setOnItemClickListener
)setChoiceMode
devrait être défini pour un ListView.Et le contrôle de la ligne à l'intérieur de l'adaptateur getView devrait être fait par le biais de:
listView.setItemChecked(position, value)
Probablement CheckedTextView est contrôlée par ListView, avez-vous setChoiceMode à plusieurs pour ListView?
si vous avez accès à l'instance de votre contrôle ListView, de l'adaptateur, vous pouvez (et devriez) utilisation listView.setItemChecked(position, valeur)
Alex Orlov, préfet. Merci beaucoup. J'ai passé une instance de l'adaptateur et fait ce que vous avez dit. Et il fonctionne maintenant comme un charme. Merci de modifier votre réponse et votre commentaire 🙂
Vous pouvez utiliser
((ListView) parent).setItemChecked(position, true);
à partir de la carte au lieu de passer d'une référence.OriginalL'auteur Alex Orlov
@Pier-Luc Gendreau et @fox mentionné la solution dans les commentaires, mais pas de réponse, donc de poster la réponse sur leur nom.
Comme mentionné par @AlexOrlov, CheckedTextView n'est pas focusable, ou cliquable sans manipulation. Donc, ce que vous avez à faire est de définir l'élément de vérifier à l'aide de Liste, vous pouvez soit le faire à partir de la carte elle-même ou de l'activité/fragment où vous avez ListView.
De le faire à partir de l'adaptateur,
De l'activité/fragment
OriginalL'auteur Rohan Kandwal