Android ListView CheckedTextView Blinking
-
08-10-2019 - |
Question
Avoir un problème avec CheckedTextView que je ne peux pas sembler trouver une solution. Je ne suis même pas tout à fait sûr ce qui se passe.
J'ai un ListView personnalisé dont les lignes contiennent TextViews et un CheckedTextView.
row.xml
<CheckedTextView
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/title"
android:text="Name"
android:gravity="center_vertical"
android:paddingRight="6dip"
android:typeface="sans"
android:checkMark="?android:attr/textCheckMark"
android:textSize="16sp"
android:textStyle="bold"/>
MyAdapterView.java
public class RuleAdapterView extends LinearLayout
{
private CheckedTextView title;
...
title = (CheckedTextView)v.findViewById(R.id.title);
title.setText(entry.getName());
title.setChecked(entry.isActive());
// setup a listener for the checkbox
title.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
((CheckedTextView) v).toggle();
}
});
}
Et dans le principal fichier XML que je mis ListView à android:choiceMode="multipleChoice"
.
Alors, ce que je veux est pour les lignes de ListView à long et à court cliquable et pour le CheckedTextView d'être l'exécution de clic séparé. Cela fonctionne à l'exception de la partie de texte de la CheckedTextView. Chaque fois que l'on appuie sur la CheckedTextView, le texte « scintille ». Je l'ai fait lentement à comprendre exactement ce qui se passait. Lorsque vous appuyez sur le CheckTextView, le texte blanc disparaît ou noir (peut-être bascule invertis?) Et quand vous relâchez, reparaît texte et les Verrous en coche. Il n'y a pas d'effet de « scintillement » lorsque l'on appuie sur ListView.
Toutes les idées sur ce qui se passe ici?
Merci
La solution
Au lieu d'utiliser OnClickListener vous devriez essayer d'utiliser OnTouchListener
ckToggle.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
CheckedTextView ck = ((CheckedTextView) v);
ck.toggle();
return false;
}
});
Autres conseils
ListView utilise son propre système lorsqu'un élément est cliqué (mettant en lumière l'arrière-plan). Vous pouvez consulter cette solution Android comment faire Voir les meilleurs moments lorsque vous cliquez dessus