CheckedTextView no marcado

Quiero una lista Multiselected (checked) listview . Cuando selecciono un elemento, la marca de verificación verde debe aparecer. Para esto uso CheckedTextViews . El ListView obtiene los datos de la base de datos. Estoy usando un SimpleCursorAdapter para eso. Al hacer clic en el botón, las entradas seleccionadas (ID) se pasarán a la siguiente actividad.

Mi problema es que las marcas de verificación de CheckedTextView no aparecen. Pero los identificadores se pasarán a la siguiente actividad. ¿Qué estoy haciendo mal? ¿Como arreglarlo?

Selecttest.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <Spinner android:id="@+id/spinner_select_language" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" /> <Button style="@style/btn_Font" android:id="@+id/selecttest_start" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/spinner_test" android:onClick="onClick" android:text="@string/selecttest_start" /> <ListView android:id="@+id/lv_lesson" android:layout_width="match_parent" android:layout_height="200dp" android:fadeScrollbars="false" android:choiceMode="multipleChoice" android:layout_alignParentLeft="true" android:cacheColorHint="#00000000" android:layout_below="@+id/selecttest_start" > </ListView> </RelativeLayout> 

Dataset_ctv_lesson.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <CheckedTextView style="@style/tv_Font" android:id="@+id/ctv_lesson" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="@string/none" android:checkMark="@drawable/ctv_state_checker" /> </RelativeLayout> 

Ctv_state_checker.xml

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="false" android:drawable="@drawable/btn_check_buttonless_off" /> <item android:state_checked="true" android:drawable="@drawable/btn_check_buttonless_on" /> </selector> 

SelectTestActivity.java

 public class SelectTestActivity extends Activity implements OnItemSelectedListener { Database db; SimpleCursorAdapter adaptercursor, lv_adaptercursor; ListView lv_lesson; // Arraylist for checked item in the lesson view ArrayList<String> checkedlessons = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.selecttest); // Create Database db = new Database(this); // Drop-Down-Menu to select a language Spinner spinner_language = (Spinner) findViewById(R.id.spinner_select_language); spinner_language.setOnItemSelectedListener(this); Cursor cursor = db.createListViewCursor(); String[] displaycolumn = new String[]{"language"}; int[] displayview = new int[] {R.id.tv_language}; adaptercursor = new SimpleCursorAdapter(this, R.layout.datasetlanguage, cursor, displaycolumn, displayview, 0); spinner_language.setAdapter(adaptercursor); // ListView to select a lesson lv_lesson = (ListView) findViewById(R.id.lv_lesson); cursor = db.createListViewLessonCursor(getSelectedItemIDFromSpinnerLanguage()); displaycolumn = new String[]{"lesson"}; int[] displayview2 = new int[] {R.id.ctv_lesson}; lv_adaptercursor = new SimpleCursorAdapter(this, R.layout.dataset_ctv_lesson, cursor, displaycolumn, displayview2, 0); lv_lesson.setAdapter(lv_adaptercursor); lv_lesson.setOnItemClickListener(new ListView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (!checkedlessons.contains(Long.toString(id))) { checkedlessons.add(Long.toString(id)); // checked textview lv_lesson.setItemChecked(position, true); } else { checkedlessons.remove(Long.toString(id)); // unchecked textview lv_lesson.setItemChecked(position, false); } } }); // Close the database db.close(); } 

  1. Intente quitar el estilo de su CheckedTextView, pienso que algunos valores en su estilo afectan la apariencia.
  2. Quitar el RelativeLayout en dataset_ctv_lesson.xml, y no es necesario cambiar el estado de verificación en el elemento hecho clic. ListView podría mantener el estado de comprobación por sí mismo. Utilice ListView.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE) para habilitar el modo de selección múltiple y use ListView.getCheckedItemPositions () para obtener las posiciones de fila comprobadas.
  • Cómo obtener una posición de elemento de lista haciendo clic en el botón dentro de él?
  • ¿Usando SimpleCursorAdapter con Spinner?
  • Cómo mostrar los contactos en un listview en Android para Android api 11+
  • Android: ¿Cómo Requerir un Cursor para actualizar ListView después de eliminar la fila de la base de datos?
  • Android: Utilizar SimpleCursorAdapter para obtener datos de la base de datos a ListView
  • Cursor se desactiva antes de llamar a este método
  • Cómo obtener datos de Cursor en ContextMenu
  • ¿Cómo leer un DB de SQLite en android con un cursorloader?
  • Cómo combinar dos o más columnas con Android SimpleCursorAdapter
  • Buscar lista de nombres de género con canciones
  • ¿Qué bandera usar en SimpleCursorAdapter?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.