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!