【问题标题】:Simple ListPreference is not working. Any ideas?简单的 ListPreference 不起作用。有任何想法吗?
【发布时间】:2011-04-04 14:27:53
【问题描述】:

有人可以告诉我我做错了什么吗?我打赌我错过了一件小事。我查看了开发者网站并阅读了一些教程,但我只是没有看到我做错了什么。

我正在尝试使用 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 > 文件资源管理器 > 数据 > 数据 > packageName > 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 实际上确实 = gsone 所以....我不明白它甚至没有播放默认声音有什么问题。是的,我已经测试过

mSoundManager.playSound(1); 
mSoundManager.playSound(2); 
mSoundManager.playSound(3);

所有这些都没有其他代码,它们工作得很好。我不确定什么是有效的

【问题讨论】:

    标签: java android settings listpreference


    【解决方案1】:

    greensound.equals("gsone")

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题。我将我的 '==' 比较更改为 string.contentsEquals() 并且事情开始起作用了。我最终将键和值放入了 HashMaps。

      【讨论】:

        【解决方案3】:

        我能想到的唯一问题是在运行 playSound 代码之前没有设置您的偏好。为确保加载设置,在您的 onCreate() 中包含以下代码:

        /* Loading default preferences the first time application is run */
                PreferenceManager.setDefaultValues(getApplicationContext(),
                        R.xml.filename, false);
        

        此外,通过 DDMS > 文件资源管理器 > 数据 > 数据 > packageName > SharedPreferences 检查您的偏好设置。

        当您使用 Preference Activity 并从 xml 资源创建它时。它会自动创建一个 SharedPreference 文件:packageName_preferences(例如 com.my_company.my_app_preferences)。因此,要访问它,您需要使用以下代码:

        SharedPreferences prefs = getSharedPreferences("com.my.app_preferences", MODE_PRIVATE);
        

        最后删除xml中的以下行:

        android:defaultValue="gsone"
        

        希望这会有所帮助。

        【讨论】:

        • 感谢您的尝试,但遗憾的是它不起作用。我用我目前正在使用的整个代码更新了我的第一篇文章。是否需要向 Settings.java 添加任何内容?例如,当我使用复选框时,我知道有一些代码需要添加到 Settings.java。
        • 想通了——看看我更新的答案!抱歉,我无法立即看到这个。现在它肯定可以工作了!
        • 还是不行。我用我正在使用的东西再次更新了我的帖子。我还尝试了 com.my.app_Settings,因为这是我的 pref java 文件的名称。您确定 Settings.java 中没有任何内容吗?
        • 不,不用担心 settings.java。使用调试器查看greensound的值;使用 DDMS 和文件资源管理器查看文件是否正在设置?
        • 好吧,看起来由于某种原因我只能让 DDMS 与模拟器一起工作。它不适用于我的 nexus 之一。无论如何,我会用我在共享首选项上找到的信息更新原始帖子。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-06
        • 2021-11-27
        • 1970-01-01
        • 2011-11-23
        • 2020-03-12
        • 1970-01-01
        • 2013-09-27
        相关资源
        最近更新 更多