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

¿Fue útil?

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?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top