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.

  • ActionBar BUG: Listenmodus-Navigation ist nach der Verwendung von SearchView nicht sichtbar
  • Wie erkennt man, ob die Done-Taste in ActionMode angeklickt wird
  • Aktionsleiste zeigt keine Aktionsansicht-Symbole an
  • ActionBarSherlock Tab Höhe nicht einstellbar auf Jelly Bean
  • R kann bei der Verwendung von ActionBarSherlock nicht behoben werden
  • Set android: showAsAction = "ifRoom | mitText" programmgesteuert
  •  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 mehrere Benachrichtigungen per GCM erhalten, ohne den Präzedenzfall zu ersetzen?
  • Wie kann ich laufende Anwendungen in Android überprüfen?
  • Verwenden von TouchScreens für die Spielsteuerung
  • Wie man Daten aus der Cursorklasse abruft
  • Ändern des z-Index (z-order) des Kartenmarkers für Maps V2 in Android
  • Android Maps API v2 MyLocation Icon ändern
  • 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.