2010-08-27 2 views
2

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

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

Это все смущает меня больше, потому что ... Это выглядит s like greedsound делает infact = gsone так .... Я не понимаю, что не так, что он даже не воспроизводит звук по умолчанию. и да, я проверил

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

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

ответ

0

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

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

Кроме того, проверьте через DDMS> File Explorer> Data> Данные>PACKAGENAME> SharedPreferences, что ваши предпочтения становятся установлены.

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

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

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

android:defaultValue="gsone" 

Надеется, что это помогает.

+0

Благодарим за попытку, но, к сожалению, это не работает. Я обновил свой первый пост с помощью всего кода, который я использую в настоящее время. Что-то нужно добавить в Settings.java? Например, я знаю, что есть некоторый код, который мне нужно добавить в Settings.java, когда я использую флажки. – brybam

+0

Выяснил это - ознакомьтесь с моим обновленным ответом! Извините, я не мог сразу это увидеть. Теперь это определенно должно работать! –

+0

Он все еще не работает. Я снова обновил свой пост тем, что я использую. Я также попробовал com.my.app_Settings, так как это имя моего pref java-файла. Вы уверены, что ничего не происходит в Settings.java? – brybam

1

У меня была аналогичная проблема. Я изменил свои сравнения «==» на string.contentsEquals(), и все стало работать. В конечном итоге я положил ключи и значения в HashMaps.

Смежные вопросы