Android 如何从 SharedPreference 设置 EditTextPreference 的默认值?
Posted
技术标签:
【中文标题】Android 如何从 SharedPreference 设置 EditTextPreference 的默认值?【英文标题】:Android how to set default value of EditTextPreference from SharedPreference? 【发布时间】:2015-04-07 15:15:48 【问题描述】:这次在同一个项目中,我面临一个稍微具有挑战性的问题,在 res/xml 文件夹中的 settings.xml 文件中:
<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
分别设置为存储在SharedPreferences
中的weight
和age
。
现在,我该怎么做呢?
编辑:提供了使用 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);
【问题讨论】:
你想从代码中设置 android:defaultValue 吗? @Rami 如果只能通过代码实现,当然可以。但是如果xml可以帮助自己找到它,那就更好了。喜欢:@strings/....
等等等等……类似的东西。
在xml中,你可以通过:android:defaultValue="YOUR_DEFAULT_VALUE"。请注意,您从 strings.xml android:defaultValue="@strings/....". 获取默认值
@Rami 哦,不,我不打算从 strings.xml 设置默认值,我只是想举一个例子,以与 strings.xml 类似的方式设置默认值.我想将默认值设置为我存储在SharedPreferences
中的字符串,它们的键是"weight"
和"age"
。
【参考方案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
' 保存的键(在本例中为 weight
和 age
的 WeightAndAgeStorage
)数据。
希望现在或将来阅读本文的其他人(但过去呢?)从这一发现中受益。
干杯!
【讨论】:
@Rami 不能,只能在添加后的第二天接受。 @Rami 感谢您的尝试!【参考方案2】:首先,设置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)。
您可以将 weightData
更改为您的值(即 54)。先看编辑。但是,最好在首选项中创建一个NumberPicker
,将数据保存为int
(编号值),因为EditTextPreference
始终将数据保存为String
值。 记住: String
不能用于数学,但int
可以。
感谢您的帮助。我也找到了办法。【参考方案3】:
您所要做的就是使用 sharedPreferences.getString() ,然后使用 editext.setText() 。
【讨论】:
您能否进一步说明如何执行此操作以及它是如何工作的?以上是关于Android 如何从 SharedPreference 设置 EditTextPreference 的默认值?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Android 版本 Marshmallow 开始请求从 Android 拨打电话的权限?
android: 如何从 Android Support Lib 版本 4 向 PagerTabStrip 添加图标/drawables?