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

13

这次在同一个项目中,我遇到了一个稍微具有挑战性的问题,即位于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();
我在这里尝试的是将上述两个EditTextPreference的android:defaultValue设置为SharedPreferences中存储的weightage。现在,我该如何做到这一点呢?编辑:提供了使用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
@Rami 如果只能通过编码实现,当然可以。但是如果XML可以自行找到它,那会更好。像这样:@strings/....等等...类似的东西。 - ㅤㅤㅤㅤㅤㅤ
在xml中,您可以通过以下方式实现:*android:defaultValue="YOUR_DEFAULT_VALUE"。请注意,您可以从strings.xml中获取默认值android:defaultValue="@strings/...."*。 - Rami
@Rami 噢,我不打算从strings.xml中设置默认值,我只是想举个例子,以类似于从strings.xml中设置默认值的方式来设置默认值。我想将默认值设置为我在“SharedPreferences”中存储的字符串,它们的键是“weight”和“age”。 - ㅤㅤㅤㅤㅤㅤ
3个回答

7

好的,各位,我明白了:

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键(在这种情况下,是WeightAndAgeStorageweightage)数据。

希望现在或未来(过去呢?)阅读此文的任何人都能从中受益。

干杯!


@Rami 不行,只能在下一天才能接受,因为它是在那之后添加的。 - ㅤㅤㅤㅤㅤㅤ
@Rami 谢谢你也尝试了! - ㅤㅤㅤㅤㅤㅤ
非常感谢。经过多年,它仍然是一个加速器。 - peter_the_oak

5

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

好的,我刚刚尝试了一下,但似乎没有起作用。在editTextPreference中显示的文本是“weightData”,而不是真实保存的数字字符串(54)。 - ㅤㅤㅤㅤㅤㅤ
你可以将 weightData 更改为你的值(例如 54)。请先进行编辑。但是,最好在首选项中创建一个 NumberPicker,以 int(编号值)保存数据,因为 EditTextPreference 总是将数据保存为 String 值。记住: String 不能用于数学计算,但 int 可以。 - Anggrayudi H
谢谢帮忙。我也找到了另一种方法。 - ㅤㅤㅤㅤㅤㅤ

0
你所要做的就是使用sharedPreferences.getString(),然后使用editext.setText()来设置它。

你能帮忙进一步澄清如何做以及它是如何工作的吗? - ㅤㅤㅤㅤㅤㅤ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接