Android: list.getCheckedItemPositions () siempre devuelve nulo

He creado un ListView personalizado extendiendo SimpleCursorAdapter. El resultado es IMAGEN + CheckedTextView (Texto + Casilla de verificación).

Después de que tuve problemas con las casillas de verificación incorrectas marcadas (mira aquí) Tuve que eliminarlv.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE); de onCreate.

Ahora hago clic en una línea ListItem y marca la casilla de verificación correcta.

Lo que intento hacer es hacer un LinearLayout.VISIBLE cuando 1 o más casillas están marcadas Y hacer LinearLayout.GONE cuando no está marcada ninguna casilla.

Aquí está el código:

lv.setOnItemClickListener(new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

CheckedTextView markedItem = (CheckedTextView) view.findViewById(R.id.btitle);

if (!markedItem.isChecked()) {
 markedItem.setChecked(true);

 //show bottom control panel
 findViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.VISIBLE);


} else {
 markedItem.setChecked(false);

 SparseBooleanArray lala = ((ListView) parent).getCheckedItemPositions();

 //if no checkbox is checked, hide bottom control panel
 if (lala == null) {
  findViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.INVISIBLE);
 }
}
view.refreshDrawableState();
//showSortBtn(markedItem);

}});

Así es como ato el listView al adaptador personalizado:

projection = new String[] { Browser.BookmarkColumns._ID,
                Browser.BookmarkColumns.FAVICON, Browser.BookmarkColumns.TITLE,
                Browser.BookmarkColumns.URL };
        displayFields = new String[] { Browser.BookmarkColumns.TITLE,
                Browser.BookmarkColumns.FAVICON, Browser.BookmarkColumns.URL };
        int[] displayViews = new int[] { android.R.id.icon, android.R.id.text1 };

        cur = managedQuery(BOOKMARKS_URI, projection,
                Browser.BookmarkColumns.BOOKMARK + " == 1", null, Browser.BookmarkColumns.VISITS + " DESC");

        setListAdapter(new ImageCursorAdapter(this,
                android.R.layout.simple_list_item_single_choice, cur,
                displayFields, displayViews));

Tengo dos problemas con esto:

si marco 2 o más casillas de verificación y luego desmarco solo una, LinearLayout desaparece, lo que significaSparseBooleanArray lala = ((ListView) parent).getCheckedItemPositions(); es nulo. ¿Por qué es nulo si todavía hay otras casillas marcadas?

si cambiofindViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.INVISIBLE); afindViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.GONE); (como quiero hacer) la primera casilla de verificación se está marcando correctamente y después de que LinearLayout se haya ido, todo vuelve a ser un desastre, al igual que enmi pregunta anterior.

Agradezco cualquier ayuda!

Respuestas a la pregunta(1)

Su respuesta a la pregunta