2011-04-10 12 views
18

Existen muchas preguntas sobre cómo usar CheckedTextView pero no puedo hacerlo funcionar correctamente.ListView con CHOICE_MODE_MULTIPLE utilizando CheckedText en una vista personalizada

Tengo un CursorAdapter con una vista personalizada que tiene un CheckedTextView con android:id="@android:id/text1". He usado android:id/text1 porque hay diferentes preguntas que mencionan que si lo usa obtendrá múltiples opciones de modo gratuito.

Si hago algo como esto:

final long[] checkedIds = mListView.getCheckedItemIds(); 
for (int i = 0 ; i < mListView.getCheckedItemCount() ; i++) { 
    Log.d(TAG, "id checked: " + checkedIds[i]); 
} 

consigo todos los identificadores controladas y sin un problema, pero no puedo ver ninguna retroalimentación visual en el ListView.

En otras palabras, la lógica está bien, pero cuando hago clic en CheckedTextView, la marca verde no aparece.

Estaba leyendo el código src ListView y no pude encontrar ninguna referencia a android:id/text1 y me pregunto si debería manejar el estado comprobado del widget yo mismo.

¿Alguien puede detectar dónde se usa android:id/text1 para marcar el widget o no?

Respuesta

32

Con base en mi lectura del código, la fila tiene que aplicar Checkable:

if (mChoiceMode != CHOICE_MODE_NONE && mCheckStates != null) { 
    if (child instanceof Checkable) { 
     ((Checkable) child).setChecked(mCheckStates.get(position)); 
    } 
} 

Esto funciona para los diseños de la fila para las listas con el modo de elección debido a que la fila es un CheckedTextView, que implementa Checkable.

Por lo tanto, agregue la interfaz Checkable a su personalizado View, delegando los métodos de la interfaz al CheckedTextView, y vea si eso funciona.

+5

Genial. Eso fue lo que hice. Hice una vista personalizada que extiende 'LinearLayout' e implementa' Checkable'. No es necesario utilizar 'android: id/text1', solo necesita que su vista principal sea controlable. Ahora recibo marcas verdes duplicadas, pero ese es un problema diferente. Gracias, Mark! – Macarse

+0

¿Qué sucede si tengo un botón de radio en el adaptador de base? –

Cuestiones relacionadas