2015-02-07 82 views
2

這一次在同一個項目中,我面臨着一個稍微具有挑戰性的問題,即在RES/XML文件夾settings.xml文件:Android如何從SharedPreference中設置EditTextPreference的默認值?

<EditTextPreference 
    android:key="weight" 
    android:title="@string/update_user_weight" 
    android:persistent="true" 
    android:dialogTitle="@string/update_user_weight" 
    android:dialogMessage="@string/update_user_weight_message" 
    android:defaultValue="" /> 

<EditTextPreference 
    android:key="age" 
    android:title="@string/update_user_age" 
    android:persistent="true" 
    android:dialogTitle="@string/update_user_age" 
    android:dialogMessage="@string/update_user_age_message" 
    android:defaultValue="" /> 

,並在類文件UserData.java:

SharedPreferences storeWeightAndAge = getSharedPreferences("WeightAndAgeStorage", Context.MODE_PRIVATE); 
Editor store = storeWeightAndAge.edit(); 
store.putString("weight", weightData); 
store.putString("age", ageData); 
store.commit(); 

我在這裏要做的是將上面的兩個EditTextPreferences'android:defaultValue分別設置爲weightage分別存儲在SharedPreferences中。

現在,我該怎麼做呢?

編輯:使用settings.xml文件提供Settings.java文件:

package com.example.drinkup; 

import android.content.SharedPreferences; 
import android.os.*; 
import android.preference.PreferenceFragment; 
import android.preference.PreferenceActivity; 
import android.preference.PreferenceManager; 

public class Settings extends PreferenceActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.settings); 



    } 

} 
+0

你想從代碼設置* android:defaultValue *? – Rami 2015-02-07 17:32:22

+0

@Rami如果它唯一可能通過代碼,當然。但如果xml可以幫助自己找到它,那會更好。就像:@strings/....等等等等。 – blaberer 2015-02-07 23:05:14

+0

在xml中,您可以通過以下方式執行:* android:defaultValue =「YOUR_DEFAULT_VALUE」*。請注意,您從strings.xml * android:defaultValue =「@ strings /...."*獲取了默認值。 – Rami 2015-02-08 00:03:02

回答

1

好球員,我明白了:

import android.preference.EditTextPreference; 

public class Settings extends PreferenceActivity { 


    EditTextPreference weightEditTextPreference; 
    EditTextPreference ageEditTextPreference; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.settings); 

     weightEditTextPreference = (EditTextPreference)findPreference("weight"); 
     ageEditTextPreference = (EditTextPreference)findPreference("age"); 

     SharedPreferences getWeightAndAgeStore = getSharedPreferences("weightAndAgeStorage", Context.MODE_PRIVATE); 
     weightEditTextPreference.setText(getWeightAndAgeStore.getString("weight", "0")); 
     ageEditTextPreference.setText(getWeightAndAgeStore.getString("age", "0")); 

這裏做的事情是,它設置的EditText框的SharedPreferences「保存鍵(在這種情況下,weightWeightAndAgeStorageage)數據的對話框在當你按下它時彈出。

希望其他人現在或將來閱讀此文(但過去如何?)從這一發現中受益。

乾杯!

+0

@Rami不能,自從添加後第二天才能接受。 – blaberer 2015-02-08 09:19:04

+0

啊,你是對的...我忘了這種情況 – Rami 2015-02-08 09:36:57

+0

@Rami謝謝你的嘗試呢! – blaberer 2015-02-08 12:02:44

2

首先,爲EditTextPreference設置的默認值。該值將被存儲爲String類型。例如:

<EditTextPreference 
    android:key="weight" 
    android:defaultValue="enter your value (54)" 
    ... /> 

<EditTextPreference 
    android:key="age" 
    android:defaultValue="enter your value" 
    ... /> 

然後,在您的應用程序的活動首先啓動的活動(首次安裝)中應用默認值。例如,在MainActivityonCreate()方法:

PreferenceManager.setDefaultValue(this, R.xml.settings, false); 
+0

嗯,我剛剛嘗試過這個,它似乎沒有工作。文本在'editTextPreference'中顯示爲'weightData',而不是真正的保存的重量,它是一個編號的字符串(54)。 – blaberer 2015-02-07 22:58:52

+0

您可以將'weightData'更改爲您的值(即54)。請先參閱編輯。但是,最好在首選項中創建一個'NumberPicker',將數據保存爲'int'(編號值),因爲'EditTextPreference'總是將數據保存爲'String'值。 **記住:**'字符串不能用於數學,但'int'可以。 – 2015-02-08 03:52:15

+0

感謝您的幫助。我也找到了一個方法。 – blaberer 2015-02-08 09:20:01

0

所有你需要做的就是使用sharedPreferences.getString(),然後使用editext.setText()這一點。

+0

你能幫助進一步澄清如何做到這一點,以及它如何工作? – blaberer 2015-02-07 23:03:39