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.

  • Force Overflow-Menü in ActionBarSherlock
  • ActionBarSherlock AndroidManifest.xml und andere Dateien beim Import fehlen
  • Wie hat es Google geschafft? Slide ActionBar in der Android-Anwendung
  • Display Back Arrow auf der Symbolleiste Android
  • Wie man den Handlungsmodus "fertig" richtig korrigiert?
  • Wie bekomme ich Titelleiste in Android?
  •  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> 

  • Measuring Text Höhe auf Leinwand gezeichnet werden (Android)
  • Gibt es ein AppCompat-Äquivalent von Widget.Material.Spinner.Underlined?
  • Force-Anwendung zum Neustart auf erste Aktivität
  • Android "Nur der ursprüngliche Thread, der eine Ansichtshierarchie erstellt hat, kann seine Ansichten berühren."
  • Kann ein GridView eine Fußzeile und Header wie ListView haben?
  • Android: Wie passieren Paket Paket zu Absicht und verwenden getParcelable Methode des Bündels?
  • 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.