有人可能会告诉我我做错了什么吗?我打赌我错过了一件小事。我查看了开发者网站,我已经阅读了一些教程,我只是没有看到我做错了什么。
我正在尝试使用ListPreference来决定点击按钮时播放的声音。
我在顶部有这个:
public String greensound;
这是我的OnClick代码:
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;
这是我的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>
这是我的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);
}
}
这是我的数组,如果这将有所帮助:
//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>
编辑:添加了一个看起来可能相关的logcat。
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&gt;文件资源管理器&gt;数据&gt;数据&gt; packageName&gt; SharedPreferences 这是在那里:
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>
这一切都让我更加困惑,因为......看起来greedsound确实是infact = gsone 所以....我不明白它有什么不对,甚至没有播放默认声音。是的,我已经测试了
mSoundManager.playSound(1);
mSoundManager.playSound(2);
mSoundManager.playSound(3);
所有没有其他代码,他们工作得很好。我不确定是什么工作
答案 0 :(得分:1)
greensound.equals( “gsone”)
答案 1 :(得分:1)
我有类似的问题。我将'=='比较改为string.contentsEquals(),事情就开始了。我最终把键和值放到了HashMaps中。
答案 2 :(得分:0)
我能想到的唯一问题是,在运行playSound代码之前,您的首选项没有设置好。要确保加载设置,请在onCreate()中包含以下代码:
/* Loading default preferences the first time application is run */
PreferenceManager.setDefaultValues(getApplicationContext(),
R.xml.filename, false);
另外,通过DDMS检查&gt;文件资源管理器&gt;数据&gt;数据&gt; packageName &gt;您的偏好设置已设置的SharedPreferences。
使用“首选项活动”并从xml资源创建它时。它会自动创建一个SharedPreference文件:packageName_preferences(例如com.my_company.my_app_preferences)。因此,要访问它,您需要使用以下代码:
SharedPreferences prefs = getSharedPreferences("com.my.app_preferences", MODE_PRIVATE);
最后删除xml中的以下行:
android:defaultValue="gsone"
希望这有帮助。