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
分别设置为weight
和age
分别存储在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);
}
}
好球员,我明白了:
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
“保存键(在这种情况下,weight
和WeightAndAgeStorage
age
)数据的对话框在当你按下它时弹出。
希望其他人现在或将来阅读此文(但过去如何?)从这一发现中受益。
干杯!
首先,为EditTextPreference
设置的默认值。该值将被存储为String
类型。例如:
<EditTextPreference
android:key="weight"
android:defaultValue="enter your value (54)"
... />
<EditTextPreference
android:key="age"
android:defaultValue="enter your value"
... />
然后,在您的应用程序的活动首先启动的活动(首次安装)中应用默认值。例如,在MainActivity
的onCreate()
方法:
PreferenceManager.setDefaultValue(this, R.xml.settings, false);
嗯,我刚刚尝试过这个,它似乎没有工作。文本在'editTextPreference'中显示为'weightData',而不是真正的保存的重量,它是一个编号的字符串(54)。 – blaberer 2015-02-07 22:58:52
您可以将'weightData'更改为您的值(即54)。请先参阅编辑。但是,最好在首选项中创建一个'NumberPicker',将数据保存为'int'(编号值),因为'EditTextPreference'总是将数据保存为'String'值。 **记住:**'字符串不能用于数学,但'int'可以。 – 2015-02-08 03:52:15
感谢您的帮助。我也找到了一个方法。 – blaberer 2015-02-08 09:20:01
所有你需要做的就是使用sharedPreferences.getString(),然后使用editext.setText()这一点。
你能帮助进一步澄清如何做到这一点,以及它如何工作? – blaberer 2015-02-07 23:03:39
你想从代码设置* android:defaultValue *? – Rami 2015-02-07 17:32:22
@Rami如果它唯一可能通过代码,当然。但如果xml可以帮助自己找到它,那会更好。就像:@strings/....等等等等。 – blaberer 2015-02-07 23:05:14
在xml中,您可以通过以下方式执行:* android:defaultValue =“YOUR_DEFAULT_VALUE”*。请注意,您从strings.xml * android:defaultValue =“@ strings /...."*获取了默认值。 – Rami 2015-02-08 00:03:02