Einfache ListPreference funktioniert nicht. Irgendwelche Ideen?
-
01-10-2019 - |
Frage
Könnte jemand mir vielleicht sagen, was ich falsch mache? Ich wette, im eine Kleinigkeit fehlt. Ich habe auf der Entwickler-Website geschaut und ich habe einige Tutorials gelesen und ich bin einfach nicht sehen, was ich falsch gemacht habe.
Ich versuche, eine ListPreference zu verwenden, um zu entscheiden, welcher Sound auf einer Schaltfläche klicken, um zu spielen.
Ich habe dies an der Spitze:
public String greensound;
Hier ist mein OnClick Code:
case R.id.green:
SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this);
greensound = prefs.getString("greensound", "gsone");
if (greensound == "gsone") {
mSoundManager.playSound(1);
} else if (greensound == "gstwo") {
mSoundManager.playSound(2);
} else if (greensound == "gsthree") {
mSoundManager.playSound(3);
}
break;
Hier ist mein xml:
<ListPreference
android:title="Geen Button"
android:key="greensound"
android:summary="Select sound for the Green Button"
android:entries="@array/green_list"
android:entryValues="@array/green_list_values"
android:defaultValue="gsone">
</ListPreference>
hier ist mein Settings.java:
package com.my.app;
import android.os.Bundle;
import android.preference.PreferenceActivity;
public class Settings extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
}
}
und hier ist mein Array ist, wenn das hilft überhaupt:
//This is the one I want to display to the user
<string-array name="green_list">
<item>Sound One</item>
<item>Sound Two</item>
<item>Sound Three</item>
<item>Sound Four</item>
<item>Sound Five</item>
</string-array>
<string-array name="green_list_values">
<item>gsone</item>
<item>gstwo</item>
<item>gsthree</item>
<item>gsfour</item>
<item>gsfive</item>
</string-array>
bearbeiten. Hinzugefügt, um eine logcat, die irgendwie möglicherweise sahen im Zusammenhang
08-27 01:52:07.738: WARN/Resources(6846): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f090000}
08-27 01:52:07.748: WARN/Resources(6846): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f090000}
08-27 01:52:07.758: WARN/Resources(6846): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f090000}
DDMS> Datei-Explorer> Daten> Daten> Paketname> SharedPreferences Dies ist, was war da drin:
com.my.app_preferences.xml:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="redsound">rsone</string>
<string name="greensound">gsone</string>
</map>
_has_set_default_values.xml:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="_has_set_default_values" value="true" />
</map>
Das alles wirklich verwirrt mich mehr, weil ... Es ist wie greedsound sieht tut infact = gsone so .... Ich verstehe nicht, was falsch ist es nicht einmal den Standard-Sound zu spielen. und ja, ich habe getestet
mSoundManager.playSound(1);
mSoundManager.playSound(2);
mSoundManager.playSound(3);
alle ohne den anderen Code und sie arbeiten groß. Ich bin nicht sicher, was Arbeit
Lösung
greensound.equals ( "gsone")
Andere Tipps
Ich hatte ein ähnliches Problem. Ich änderte meine ‚==‘ Vergleiche zu string.contentsEquals () und Dinge zu arbeiten begann. Ich schließlich endete die Schlüssel und Werte in HashMaps setzen.
Das einzige Problem, das ich denken kann, ist, dass Ihre Einstellungen nicht Set bekommen, bevor Sie Ihren Code playsound ausgeführt werden. Um sicherzustellen, dass die Einstellungen geladen werden den folgenden Code in Ihrer onCreate ():
/* Loading default preferences the first time application is run */
PreferenceManager.setDefaultValues(getApplicationContext(),
R.xml.filename, false);
Überprüfen Sie auch durch die DDMS> Datei-Explorer> Daten> Daten> package > SharedPreferences, dass Ihre Präferenzen werden immer gesetzt.
Wenn Sie Preference Aktivität verwenden und es aus XML-Ressource. Es erstellt automatisch eine SharedPreference Datei: packageName_preferences (. ZB com.my_company.my_app_preferences). So zum Zugriff auf diese müssen Sie den folgenden Code verwenden:
SharedPreferences prefs = getSharedPreferences("com.my.app_preferences", MODE_PRIVATE);
Und schließlich entfernen Sie die folgende Zeile in der xml:
android:defaultValue="gsone"
Hope, das hilft.