Android: list.getCheckedItemPositions () sempre retorna nulo

Eu criei um ListView personalizado estendendo o SimpleCursorAdapter. O resultado é IMAGE + CheckedTextView (Texto + Caixa de seleção).

Depois que tive problemas com as caixas de seleção erradas sendo marcadas (Veja aqui) Eu tive que removerlv.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE); de onCreate.

Agora clico em uma linha ListItem e ela marca a caixa de seleção correta.

O que estou tentando fazer é criar um LinearLayout.VISIBLE quando uma ou mais caixas de verificação estiverem marcadas E tornar LinearLayout.GONE quando nenhuma caixa de seleção estiver marcada.

Aqui está o 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);

}});

É assim que vinculo o listView ao 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));

Eu tenho dois problemas com isso:

se eu marcar 2 ou mais caixas de seleção e desmarcar apenas uma, o LinearLayout desaparecerá, o que significaSparseBooleanArray lala = ((ListView) parent).getCheckedItemPositions(); é nulo. por que é nulo se ainda existem outras caixas de seleção marcadas?

se eu mudarfindViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.INVISIBLE); parafindViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.GONE); (como eu quero fazer) a primeira caixa de seleção está sendo marcada corretamente e depois que o LinearLayout terminar, tudo ficará uma bagunça novamente, como emminha pergunta anterior.

Aprecio qualquer ajuda!

questionAnswers(1)

yourAnswerToTheQuestion