Android如何从SharedPreference中设置EditTextPreference的默认值?

问题描述:

这一次在同一个项目中,我面临着一个稍微具有挑战性的问题,即在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

好球员,我明白了:

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

首先,为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

所有你需要做的就是使用sharedPreferences.getString(),然后使用editext.setText()这一点。

+0

你能帮助进一步澄清如何做到这一点,以及它如何工作? – blaberer 2015-02-07 23:03:39