Простая ListPreference не работает.Есть какие-нибудь идеи?
-
01-10-2019 - |
Вопрос
Может быть, кто-нибудь скажет мне, что я делаю не так?Держу пари, я упускаю из виду одну маленькую деталь.Я заглянул на сайт разработчика, прочитал несколько руководств и просто не вижу, что я сделал не так.
Я пытаюсь использовать 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"
Надеюсь, это поможет.