【问题标题】:Very simple ListPreference to play sound is not working. Any ideas? (tons of details)非常简单的 ListPreference 播放声音不起作用。有任何想法吗? (大量细节)
【发布时间】:2010-08-28 03:52:10
【问题描述】:

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

我正在尝试使用 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>

//I also tried removing the default value here it didnt seem to change anything but, should it be removed?

这是我的 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>

这一切真的让我更加困惑,因为......看起来 greensound 确实 == gsone 所以......我不明白它甚至没有播放默认声音有什么问题。是的,我已经在没有 listpreference 代码的情况下测试了所有这些代码,它们工作得很好。不知道怎么回事

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

【问题讨论】:

    标签: java android arrays audio listpreference


    【解决方案1】:

    greensound == "gsone" 更改为greensound.equals(gsone)

    对于新的 Java 程序员和没有很好地掌握面向对象概念的人来说,这是一个非常常见的错误。这是比较java中的对象和值的一个很好的参考

    http://leepoint.net/notes-java/data/expressions/22compareobjects.html


    还有,为什么大家都坚持在主Activity中实现onClickListener呢?是否有一些新的教程可以说明这一点或其他什么?

    而是做一个匿名内部类(除非你有一堆按钮,并且你想以编程方式设置它们的点击监听器。

    Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new onClickListener(){ @Override public void onClick(){ Preferences pref = MyActivity.this.getSharedPreferences() String s = pref.getString("sound","gsone"); } });

    【讨论】:

    • greensound.equals("gsone") 是它!谢谢你,我正要打破我的手机!!!!!!!!!!!!!!!编辑:该网站不会让我将其标记为另外 3 分钟的答案,所以当我可以的时候我会这样做。谢谢!
    猜你喜欢
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    相关资源
    最近更新 更多