Hallo Fabien,
nein .. ich meine ein bestimmtes Menü, also eines das in einer Applikation als Applkiaktionseigenens Menü selbst erstellt wird mit der Option : onCreateOptionsMenu(Menu menu)
1onCreateOptionsMenu(Menu menu)
Ein kleines Beispiel aus gegebenem Anlass in der App NoStalk. In der Applikation ist folgendes Menü eingebaut:
1@Override
2 public boolean onCreateOptionsMenu(Menu menu) {
3 MenuItem quit = menu.add(0, MENU_QUIT, 0, getString(R.string.systemMenuQuit));
4 {
5 quit.setIcon(R.drawable.ic_menu_close_clear_cancel);
6 }
7
8 /* Here comes the conditional menu entry for enabling/disabling notification icon */
9
10 if (checkPreferencesKeyNotifyExists("MYPREFS","notifyIcon") &&
11 loadPreferenceNotify("MYPREFS","notifyIcon")) {
12
13 MenuItem config =
14 menu.add(0, MENU_CONFIG, 0, getString(R.string.systemMenuiconConfigOff));
15 {
16 config.setIcon(R.drawable.ic_menu_info_details);
17 }
18 }
19 else {
20
21
22 MenuItem config =
23 menu.add(0, MENU_CONFIG, 0, getString(R.string.systemMenuiconConfigOn));
24 {
25 config.setIcon(R.drawable.ic_menu_info_details);
26 }
27 }
28
29 return true;
30 } //Ende onCreateOptionsMenu
Innerhalb dieser Menüaufbauroutine wird ein sogenanntes Conditional Menü erzeugt, also ein von bestimmten Bedingungen abhängiges Menü. In diesem Fall wird die Bedingung von einer zuvor gespeicherten oder auch nicht gespeicherten "sharedPreference" vorgegeben.
Zu jedem Menü gehört natürlich auch ein Eventmanager der bei Aufruf des Menüs die entsprechend gewählten Menüklicks abfängt und ggf. eine Aktion auslöst. Das sieht in meinem Fall zur Zeit so aus und ist im Moment allerdings nur ein Workarround (warum das erklär ich gleich noch)
1@Override
2 public boolean onOptionsItemSelected(MenuItem item) {
3
4
5 switch (item.getItemId()) {
6 case MENU_QUIT:
7 stopService(new Intent(this, CallListener.class));
8 finish();
9
10 return true;
11
12 case MENU_CONFIG:
13/* here comes the conditional Menu responder */
14 if (!loadPreferenceNotify("MYPREFS","notifyIcon")) {
15 Toast.makeText(this,
16"You have choosen to SHOW notification-icon, at next application start you have the option to disable it",
17Toast.LENGTH_LONG).show();
18 savePreferenceNotify("MYPREFS", "notifyIcon", true);
19 item.setEnabled(false);
20
21 }
22 else {
23 Toast.makeText(this,
24"You have choosen NOT to show notification-icon, at next application start you have the option to enable it",
25 Toast.LENGTH_LONG).show();
26 savePreferenceNotify("MYPREFS", "notifyIcon", false);
27 item.setEnabled(false);
28
29 }
30 return true;
31
32
33 }
34 return false;
35 }
Auch hier wird ein sogn. Conditional response gesetzt wieder durch Abfrage einer entsprechenden "sharedPreference". Allerdings setze ich hier als "Workaround" nur ein uns denselben Menüeintrag auf "disabled" um ihn nach einmaligem Ansprechen in der Activity nicht mehr auswählen zu können und weise darauf hin, dass erst mit dem nächsten Applikationsstart hier ein anderer Content erscheinen wird im Menü.
Lieber wäre es mir wenn ich zur Laufzeit der Activity bereits das MenüIcon bzw. dessen Text und die dahinterliegende Action ändern könnte. *grrml*
So wie es zur Zeit ist, wird erst bei nächsten appstart ein anderer Menüinhalt ausgegeben.
Es geht hier, nebenbei gesagt um das erste Update von NoStalk, wo es möglich sein wird das Notification Icon auszublenden.
Ich hoffe ich hab das verständlich ausgedrückt. Wenn nicht, einfach fragen ;)
lg
Vossi
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.