2015-06-30 18 views
1

的keyValue如下問題:得到ListPreference

preferences.xml

<ListPreference 
     android:title="titel" 
     android:summary="summary" 
     android:key="remove_onclick" 
     android:entries="@array/removeOnclick" 
     android:entryValues="@array/removeOnclick_value" 
     android:defaultValue="3"/> 

我的問題是,我怎樣才能得到的值(12,或3)與一個if條件使用在我的MainActivity.java

SharedPreferences sharedConfig = PreferenceManager.getDefaultSharedPreferences(this); 
    String removeOnklick = sharedConfig.getString("remove_onclick", "3"); 

這是行不通的!

引起:java.lang.ClassCastException:java.lang.Boolean中不能 鑄造爲java.lang.String在 com.notification.app.SettingsActivity.onCreate(SettingsActivity.java:14)

SettingsActivity:

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.preferences); 
    PreferenceManager.setDefaultValues(this, R.xml.preferences, false); 
} 

編輯 strings.xml

<string-array name="removeOnclick"> 
    <item>Always</item> 
    <item>Never</item> 
    <item>Always ask</item> 
</string-array> 

<string-array name="removeOnclick_value"> 
    <item>1</item> 
    <item>2</item> 
    <item>3</item> 
</string-array> 

而且我也有2個完美的工作布爾值。

boolean playSound = sharedConfig.getBoolean("sound_on_create", false); 
    boolean vibrate = sharedConfig.getBoolean("vibrate_on_create", false); 

更新:

我不得不刪除緩存和內存...

+0

是什麼內容'arrays.xml'? (如果這是一個錯誤的問題,你在哪裏存儲'@ array'的東西?) –

+0

在strings.xml中作爲字符串數組 – Landei00

回答

1

首先,該行應該被放置在MainActivity的onCreate方法:

PreferenceManager.setDefaultValues(this, R.xml.preferences, false); 

並且,要從SettingsActivity中的ListPreference中獲取值:

ListPreference pref = findPreference("remove_onclick"); 
String value = pref.getValue(); 
if (value.equals("3")){ 
    // do something here with value 3 
} 

如果你想從MainActivity值,調用:

SharedPreferences sharedConfig = PreferenceManager.getDefaultSharedPreferences(this); 
    String removeOnklick = sharedConfig.getString("remove_onclick", "3"); 
    if(removeOnklick.equals("1"){ 
      // do something here with value 1 
    } 
+0

我無法寫'String removeOnklick = sharedConfig.getString'如果我這樣做,並且啓動Settings,它會崩潰。 – Landei00

+0

@ Landei00,嘗試清除應用程序的數據,然後再啓動應用程序。 –

+0

哦,是的,就是這樣!謝謝 :) – Landei00

-1

嘗試使用getBaseContext()..

SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext( ));

,並嘗試該

如果(removeonklick == 「3」) {

}

+0

它仍然崩潰並出現相同的錯誤。 – Landei00

+0

你可以[編輯]你的答案來改變'removeonklick'這一行(通過按下灰色的編輯 - 或點擊此評論中的[編輯])。 –

+0

'this'在Activity中是合適的,以獲得偏好。另外,使用'=='是比較Java中String值的錯誤方法 – codeMagic