Android ListView CheckedTextView Intermitente
-
08-10-2019 - |
Pregunta
Tener un problema con CheckedTextView que me parece que no puede encontrar una solución. Ni siquiera estoy del todo seguro de lo que está pasando.
Tengo un ListView encargo cuyas filas contienen TextViews y una 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();
}
});
}
Y en el archivo XML principal que establece el ListView a android:choiceMode="multipleChoice"
.
Así que lo que quiero es que las filas ListView a ser largo y corto se puede hacer clic y para el CheckedTextView sea la ejecución separada clic. Esto funciona con la excepción de la parte del texto de la CheckedTextView. Cada vez que se presiona ya sea el CheckedTextView, el texto 'parpadea'. Lo hice lentamente para averiguar exactamente lo que estaba pasando. Cuando se presiona hacia abajo en la CheckTextView, el texto en blanco o bien desaparece o se elige negro (posiblemente se invierte?) Y cuando se suelta, vuelve a aparecer el texto y las palancas marca de verificación. No hay efecto 'flicker' cuando se pulsa el ListView.
¿Alguna idea sobre lo que está pasando aquí?
Gracias
Solución
En lugar de utilizar OnClickListener debería intentar usar OnTouchListener
ckToggle.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
CheckedTextView ck = ((CheckedTextView) v);
ck.toggle();
return false;
}
});
Otros consejos
ListView uses its own scheme when an item is clicked (highlighting the background). You might want to check out this solution Android how to make View highlight when clicked?