Zitat von Killua
Allerdings hatte ich bisher mit Zahlen bei der Zuweißung der casefälle gearbeitet. Daher eine kurze Frage - was bedeutet das "R.id." vor dem main_menu_options_prefs.
Ok, sehe schon wir müssen etwas weiter ausholen. Die Klasse "R" wird automatisch von der Android Build-Umgebung erzeugt. R steht dabei für "Resource" und somit enhält die Klasse alle XML Dateien, die du im Ordner "res/" erzeugst.
Auf diese Weise kannst du ganz einfach Menüs erstellen, ohne dich um irgendwelche Nummern kümmern zu müssen. Das ganze geht auch mit Strings, Preferences, Layouts, usw. - eben alles was du in die XML Dateien unterhalb von "res/" reinschreiben kannst. Jeder Eintrag in den XML Dateien erhält dabei einen eindeutigen Identifier. Diese identifier kannst du über die Klasse "R" ansprechen und Android weiss dann was gemeint ist.
Wie erstellt man jetzt also einen Menüeintrag "sauber"? Zuerst mal überlegst du dir einen Namen für die XML Datei, die alle Menüpunkte für deine Activity enthalten soll. Da unser Beispiel-Menü in der Main-Activity eingeblendet werden soll und Einträge für das Optionen-Menü enthält, nenn ich das ganze jetzt mal "main_menu_options.xml" (der Name ist egal, du solltest dir aber ein Schema überlegen). In dieser Datei soll es einen Menüpunkt geben mit der Aufschrift "Einstellungen". Du erstellst also die Datei "res/menu/main_menu_options.xml" und schreibst da folgendes rein:
res/menu/main_menu_options.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/main_menu_options_prefs"
android:icon="@android:drawable/ic_menu_preferences"
android:title="@string/main_menu_options_prefs_title"/>
</menu>
Damit definieren wir also ein neues Menü mit einem Menüeintrag für "Einstellungen". Der Name des Menüeintrags ist "main_menu_options_prefs", er hat ein Icon mit der Id "drawable/ic_menu_preferences" und einen Titel mit der id "main_menu_options_prefs_title". Die Id des Menüeintrags darfst du frei wählen, es macht aber Sinn, wenn sie in dein Schema passt - daher "main_menu_options_prefs". Das Icon wird von Android zur Verfügung gestellt, daher beginnt auch der Eintrag mit "@android:". Eine Liste aller Icons findest du irgendwo in der SDK Dokumentation. Den Title wiederum definieren wir selber (soll "Einstellungen" sein und daher vergeben wir wieder eine Id, die in unser Schema passt: "main_menu_options_prefs_title". Damit haben wir jetzt einen gültigen Menüeintrag erstellt - allerdings funktioniert er noch nicht, da wir uns zwar eine schöne Id für unseren Titel ausgedacht haben, aber diese Id noch nicht definiert haben. Wir müssen also "main_menu_options_prefs_title" erstmal definieren.
Wie alle Strings, die du irgendwo in deinem Programm definierst, schreibst du die Übersetzung von "main_menu_options_prefs_title" einfach in die die strings.xml welche du unter "res/values/strings.xml" findest oder neu erstellen musst. Das sieht dann so aus:
res/values/strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="main_menu_options_prefs_title">Einstellungen</string>
</resources>
Warum so umständlich? Warum schreiben wir nicht einfach den String "Einstellungen" in die res/menu/main_menu_options.xml Datei?
Das geht zwar, ist aber schlechter Stil. Wann immer du einen String benötigst - ganz egal wo in deinem Programm - solltest du einen Eintrag in der strings.xml definieren und diesen dann über R.string.<id> ansprechen. Das hat den Vorteil, dass du dann nur deine strings.xml übersetzen musst und schon kannst du dein Programm für alle möglichen Sprachen anbieten oder zur Laufzeit zwischen z.B. Deutsch und Englisch hin- und herschalten.
Nachdem wir jetzt ein Menü definiert haben und einen gültigen Menüeintrag können wir das ganze jetzt in unserer Activity mit Hilfe der Methoden onCreateOptionsMenu() und onOptionsItemSelected() aktivieren:
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.main_menu_options, menu);
return (super.onCreateOptionsMenu(menu));
}
@Override
public boolean onOptionsItemSelected (MenuItem item)
{
switch (item.getItemId())
{
case R.id.main_menu_options_prefs:
startActivity (new Intent (this, EditPreferences.class));
return (true);
}
return (super.onOptionsItemSelected(item));
}
Alles anzeigen
Zitat
Der teil mit startActivity war mir nicht bekannt. Daher habe ich nun , um bei dem Namen zubleiben, eine EditPreferences.class angelegt.
Um zu deiner letzten Frage zu kommen, nein diesen Teil habe ich noch nicht.
Daher meine Frage wie der weiter verlauf nun aussehen würde (aufbau der Preferences).
Dazu schreibe ich gleichmal was. Mach hier mit dem ersten Teil erstmal Schluss, sonst wird der Post zu lange. Kannst ja schonmal dein Menü anpassen.