Android: list.getCheckedItemPositions () gibt immer null zurück

Ich habe eine benutzerdefinierte ListView erstellt, indem ich SimpleCursorAdapter erweitert habe. Das Ergebnis ist IMAGE + CheckedTextView (Text + Checkbox).

Nachdem ich Probleme mit den falschen Ankreuzfeldern hatte siehe hie) Ich musste @ entfern lv.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE); von onCreate.

Jetzt klicke ich auf eine ListItem-Zeile und sie aktiviert das richtige Kontrollkästchen.

Ich versuche, ein LinearLayout.VISIBLE zu erstellen, wenn mindestens ein Kontrollkästchen aktiviert ist, UND LinearLayout.GONE zu erstellen, wenn kein Kontrollkästchen aktiviert ist.

Hier ist der Code:

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);

}});

So binde ich die listView an den benutzerdefinierten Adapter:

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));

Ich habe zwei Probleme damit:

wenn ich 2 oder mehr Kontrollkästchen ankreuze und dann nur eines abhake, verschwindet das LinearLayout, was bedeutet,SparseBooleanArray lala = ((ListView) parent).getCheckedItemPositions(); ist Null. Warum ist es null, wenn noch andere Kontrollkästchen aktiviert sind?

wenn ich @ schalfindViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.INVISIBLE); zufindViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.GONE); (wie ich es tun möchte) Das erste Kontrollkästchen wird korrekt markiert und nachdem das LinearLayout GONE ist, ist alles wieder ein Chaos, genau wie bei meine vorherige Frage.

Schätzen Sie jede Hilfe!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage