Простая ListPreference не работает.Есть какие-нибудь идеи?

StackOverflow https://stackoverflow.com/questions/3580954

Вопрос

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

Я пытаюсь использовать 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> Проводник > Данные > 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>

Все это действительно смущает меня еще больше, потому что...Похоже, что greedsound действительно infact = gsone итак....Я не понимаю, что не так, он даже не воспроизводит звук по умолчанию.и да, я проверял

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

все это без другого кода, и они отлично работают.Я не уверен, что это работает

Это было полезно?

Решение

greensound.equals("gsone")

Другие советы

У меня была похожая проблема.Я изменил свои сравнения '==' на string.contentsEquals(), и все начало работать.В конце концов я поместил ключи и значения в хэш-карты.

Единственная проблема, о которой я могу подумать, заключается в том, что ваши настройки не устанавливаются до того, как вы запустите свой код PlaySound.Чтобы убедиться, что настройки загружены, включите следующий код в свой onCreate():

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

Кроме того, проверьте через DDMS > Проводник > Данные > Data > Имя упаковки > SharedPreferences, которые будут установлены в ваших настройках.

Когда вы используете действие Preference и создаете его из xml-ресурса.Он автоматически создает файл SharedPreference:packageName_preferences (например.com.my_company.my_app_preferences).Таким образом, чтобы получить доступ к этому, вам нужно использовать следующий код:

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

И, наконец, удалите следующую строку в xml:

android:defaultValue="gsone"

Надеюсь, это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top