Очень простой ListPreference для воспроизведения звука не работает. Есть идеи? (тонны деталей)

1

Может кто-нибудь может сказать мне, что я делаю неправильно? Я держу пари, что я пропустил одну маленькую вещь. Я просмотрел сайт разработчика, и я прочитал несколько руководств, и я просто не вижу, что я сделал неправильно.

Я пытаюсь использовать 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>

Здесь выглядит логарифм, который выглядел, возможно, связанным:

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 > File Explorer > Data > Data > 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 делает это так. Я не понимаю, что не так, что он даже не воспроизводит звук по умолчанию. и да, я протестировал весь этот код без кода listpreference, и они отлично работают. Я не уверен, что неправильно

mSoundManager.playSound(1); 
mSoundManager.playSound(2); 
mSoundManager.playSound(3);
Теги:
audio
arrays
listpreference

1 ответ

1
Лучший ответ

Измените greensound == "gsone" на greensound.equals(gsone)

Это очень распространенная ошибка для новых java-программистов и людей, которые не очень хорошо разбираются в объектно-ориентированных концепциях. Здесь хорошие ссылки для сравнения объектов и значений в java

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


Кроме того, почему все настаивают на том, чтобы реализовать 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");
}
});


  • 0
    greensound.equals ("gsone") было ЭТО! СПАСИБО, что я собирался сломать мой телефон !!!!!!!!!!!!!!! редактировать: сайт не позволит мне пометить его как ответ в течение еще 3 минут, поэтому я сделаю это, когда смогу. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню