Ausblenden von Elementen in der Kontext-Aktionsleiste (CAB) dynamisch, wenn mehrere Elemente ausgewählt sind

Ich habe eine ListActivity, die CAB bei langem Klick zeigt. Wenn mehr als 1 Artikel ausgewählt ist, möchte ich einen meiner Menüpunkte verbergen.

Ich behalte die Nummer der in onItemCheckedStateChanged() ausgewählten onItemCheckedStateChanged() . Allerdings habe ich keinen Zugriff auf das Menü, um das Element aus dieser Funktion zu entfernen. Siehe Kommentare in Code unten, um eine Vorstellung davon zu bekommen, was ich versuchte. Ich fühle mich wie ich vermisse einige einfache Kernverständnis … Code unten wird von meiner onCreate() -Funktion aufgerufen.

 private void setupActionBarContext() { ListView listView = getListView(); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); listView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { private int selCount = 0; ArrayList<Long> idList = new ArrayList<Long>(); @Override public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { if (checked) { selCount++; idList.add(id); } else { selCount--; idList.remove(id); } mode.setTitle(selCount + " selected"); // I WOULD LIKE TO HIDE ITEM ON MENU IF 'selCount' IS > 1 // For example something like this... // if (selCount > 1) { // MenuItem item = menu.findItem(R.id.edit_item); // item.setVisible(false); // } else { // MenuItem item = menu.findItem(R.id.edit_item); // item.setVisible(false); // } } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { case R.id.delete_item: for(Long i: idList){ mDbHelper.deleteItem(i); } mode.finish(); return true; case R.id.edit_item: Toast.makeText(getBaseContext(), "Edit Item", Toast.LENGTH_SHORT).show(); mode.finish(); // Action picked, so close the CAB return true; default: return false; } } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { // Inflate the menu for the CAB MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); return true; } @Override public void onDestroyActionMode(ActionMode mode) { selCount = 0; idList.clear(); } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } }); 

Und mein Menüpunkt …

 <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/edit_item" android:title="@string/edit_item" android:showAsAction="ifRoom" android:orderInCategory="1"/> <item android:id="@+id/delete_item" android:title="@string/delete_item" android:icon="@drawable/ic_action_delete" android:showAsAction="ifRoom" android:orderInCategory="2"/> </menu> 

  • Wie kann ich feststellen, ob der Eingabemodus ausgewählt oder geschlossen ist?
  • OnContextItemSelected wird nicht in einem DialogFragment aufgerufen
  • Passen Sie das Kontextmenü wie das Pinterest-Menü an
  • Wie benutzt man MultiChoiceModeListener in ListVIew mit und ohne Unterstützung?
  • One Solution collect form web for “Ausblenden von Elementen in der Kontext-Aktionsleiste (CAB) dynamisch, wenn mehrere Elemente ausgewählt sind”

    Wie in der Anmerkung des Adneals vorgeschlagen.

    Add onItemCheckedStateChanged() zu onItemCheckedStateChanged()

     @Override public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { if (checked) { selCount++; idList.add(id); } else { selCount--; idList.remove(id); } mode.setTitle(selCount + " selected"); mode.invalidate(); // Add this to Invalidate CAB } 

    Dadurch wird das CAB ungültig und bewirkt, dass die Funktion onPrepareActionMode() aufgerufen wird.

     @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { if (selCount == 1){ MenuItem item = menu.findItem(R.id.edit_item); item.setVisible(true); return true; } else { MenuItem item = menu.findItem(R.id.edit_item); item.setVisible(false); return true; } } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.