Zugriff auf Menü.Checkboxen

  • Antworten:6
  • Bentwortet
Android Anfänger
  • Forum-Beiträge: 6

07.11.2015, 13:25:14 via Website

Hallo Android-Gurus,

ich habe im App-Menü diverse Checkbox-Menüeinträge, welche ich alle auf false/true beim Klicken EINER dieser Checkboxen prüfen bzw. ggf. ändern möchte. Hier mein Ansatz bzw. was ich tun möchte (aber nicht funktioniert):

  public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.action_filter:

/* der Zugriff aus der Methode bzw. switch-Schleife funktioniert eben nicht :- |, aber was ich hier vorhabe wird hoffentlich verstanden :-o */
menu.findItem(R.id.action_filter_1).setChecked(false);
menu.findItem(R.id.action_filter_2).setChecked(false);
menu.findItem(R.id.action_filter_3).setChecked(false);
menu.findItem(R.id.action_filter_4).setChecked(false);

          }
     return super.onOptionsItemSelected(item);

}

Über einen Hinweis, wie ich beim check/uncheck einer Checkbox aus dem Menü die anderen Menü-Checkboxen abfragen/bearbeiten kann, wäre ich sehr dankbar.

Danke und Grüße

ich

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

07.11.2015, 14:22:58 via App

Müsste eigentlich gehen. Wenn du den Menüeintrag R.id.action-filter drückst, was passiert dann?
Wird die Menthode aufgerufen?
Dafür am besten mal ne Log Ausgabe machen.
Ändert sich was wenn du das menü nach den betätigen des eintrags schlisst und wieder öffnest?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Android Anfänger
  • Forum-Beiträge: 6

07.11.2015, 16:54:56 via Website

Die Methode onOptionsItemSelected() wird schon aufgerufen, aber dann der Zugriff über auf die Checkbox funktioniert nicht:

menu.findItem(R.id.action_filter_4).setChecked(false);

==> das Problem ist, dass ich nicht weiß wie das Menü-Objekt dazu heißt um auf die Checkbox zuzugreifen (also es ist wohl nicht "menu") . Oder wie bekomme ich das Menü-Objekt in die Methode onOptionsItemSelected() rein?

Danke schon mal, vg

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

07.11.2015, 17:00:55 via Website

Es gibt bestimmt eine Elegantere Methode, aber bisher habe ich immer eine klassenvaraible Deklariert als "menu" und in der "onprepareoptionsmenu" dieses Menüitem dann auf das geladene gesetzt.
So hatte ich die Instanz immer Griffbereit.
Vlt. gibt es in der Activity auch ein getter für aber den kenne ich (falls es ihn gibt) nicht auswendig

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Android Anfänger
  • Forum-Beiträge: 6

07.11.2015, 17:10:27 via Website

Hi Pascal,

das hört sich gut an...aber ich bin etwas überfahren :-o. Kannst du den Schnippsel hier mal posten, damit ich das besser verstehe?

das hier funktioniert zumindest nicht:
.....

   private Menu menu;
public boolean onOptionsItemSelected(MenuItem item) {



    switch (item.getItemId()) {
        case R.id.action_filter:


            menu.findItem(R.id.action_filter_1).setChecked(false);
            menu.findItem(R.id.action_filter_2).setChecked(false);
            menu.findItem(R.id.action_filter_3).setChecked(false);
            menu.findItem(R.id.action_filter_4).setChecked(false);


            Toast.makeText(getApplicationContext(),  getString(R.string.txt_delete_filter), Toast.LENGTH_LONG).show();

}

...

Die App-Startet, aber wenn das Menü-Item "action_filter" dann geklickt wird, dann zerlegt es die App....im Log wird dann ein Fehler geworfen, was meiner Meinung nach den Absturz verursacht: "11-07 17:05:11.626 17934-17934/de.abc.de E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.Menu.findItem(int)' on a null object reference"

Cheers, ich

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

07.11.2015, 17:30:38 via Website

Jup hast volkommen recht :)
Hast ja aber auch was vergessen.
Du Definierst die Varaibal menu, weist ihr aber nie einen Wert zu.
Wenn die Variable keinen Wert (=NULL) hat, dann weiss das Progamm nicht was es machen Muss.
Das ganze musst du in einem 2. Schrittverfahren lösen:
1. auf Null Prüfen und ausschliesßen mit einer IF:

if(menu!=null)
{...}

else {//Error}
2. Die Variable Menu muss gesetzt werden

Du solltest in der Activity auch noch sowas stehen haben:

@Override
public boolean onCreateOptionsMenu(Menu menu) {

this.menu = menu; //Menü instanz setzen
        getMenuInflater().inflate(R.menu.YourMenu, menu); //MEnü aus der XML Laden

  return super.onCreateOptionsMenu(menu);
}

LG Pascal //It's not a bug, it's a feature. :) ;)

Android Anfänger

Antworten
Android Anfänger
  • Forum-Beiträge: 6

08.11.2015, 17:34:28 via Website

Besten Danke Hr. Android Pascal....hurra es funktioniert, jetzt kann ich auf das Menü-Objekt zugreifen.

Die Menü-Methode hatte zuvor so ausgehesen:

    public boolean onCreateOptionsMenu(Menu menu) {
    Log.d(LOG_TAG, "Menü wird angelegt.");
    getMenuInflater().inflate(R.menu.menu_main, menu);
 return true;

}

Danke Dir und schönen Abend

Antworten