如何使用多个字段创建单个首选项?

时间:2016-06-16 12:49:05

标签: android android-preferences

我有一个"更改密码"在我的应用程序设置中,我希望用户能够输入3个文本字段(当前密码,新密码,重复密码),然后只需单击确定按钮即可保存设置。但问题是我无法找到(或能够创建)任何可以显示多个项目的偏好(在这里3 EditTextPreference s)。

以下代码在点击进行编辑时只显示一个文本框。

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <EditTextPreference
        android:capitalize="none"
        android:password="true"
        android:defaultValue=""
        android:inputType="textCapWords"
        android:key="example_text"
        android:maxLines="1"
        android:selectAllOnFocus="true"
        android:singleLine="true"
        android:title="@string/pref_default_current_password" />

</PreferenceScreen>

我正在寻找类似的东西:

<Group>
        <EditTextPreference
            android:capitalize="none"
            android:password="true"
            android:defaultValue=""
            android:inputType="textCapWords"
            android:key="example_text"
            android:maxLines="1"
            android:selectAllOnFocus="true"
            android:singleLine="true"
            android:title="@string/pref_default_current_password" />

        <EditTextPreference
            android:capitalize="none"
            android:password="true"
            android:defaultValue=""
            android:inputType="textCapWords"
            android:key="example_text"
            android:maxLines="1"
            android:selectAllOnFocus="true"
            android:singleLine="true"
            android:title="@string/pref_default_new_password" />

        <EditTextPreference
            android:capitalize="none"
            android:password="true"
            android:defaultValue=""
            android:inputType="textCapWords"
            android:key="example_text"
            android:maxLines="1"
            android:selectAllOnFocus="true"
            android:singleLine="true"
            android:title="@string/pref_default_repeat_password" />
</Group>

2 个答案:

答案 0 :(得分:1)

您需要创建自定义DialogPreference。您的方法看起来有缺陷,您只需要将一个首选项值存储在SharedPreferences

创建一个扩展DialogPreference的类,返回您的膨胀视图onCreateDialogView(),并在单击肯定按钮时添加一些逻辑。您可以管理片段或活动类,只需扩展DialogPreference

public class CustomPreference extends DialogPreference {

    EditText first;
    EditText second;
    EditText third;

    protected View onCreateDialogView() {
        View v = LayoutInflater.from(getContext()).inflate(R.layout.three_edit_texts, null);
        first = v.findViewById(...);
        second = v.findViewById(...);
        third = v.findViewById(...);
        return v;
    }

}

然后在XML中添加一个:

<com.your.package.CustomPreference />

答案 1 :(得分:-1)

按下提交按钮后,您需要按顺序进行。

Editor editor = sharedpreferences.edit();

editor.putString("key1", "value1");
editor.putString("key2", "value2");
editor.putString("key3", "value3"); 
editor.commit();

或者更好地创建共享首选项util以避免此类锅炉板。