如何在EditTextPreference中调用ok按钮



我在PreferenceActivity中有一个EditTextPreference。当用户点击EditTextPreference将显示一个对话框。在对话框中,用户可以输入一个值,对话框中有"确定"one_answers"取消"按钮。我想调用ok按钮的click事件来检查值,但是我甚至不知道如何调用click。

我知道我可以使用EditTextPreference.setOnPreferenceChangeListener(),但我想知道我是否可以使用OK按钮单击事件

您可以扩展EditTextPreference以获得对click处理程序的控制。

package myPackage;
public class CustomEditTextPreference extends EditTextPreference {
    public CustomEditTextPreference(Context context) {
        super(context);
    }
    public CustomEditTextPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public CustomEditTextPreference(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    @Override
    public void onClick(DialogInterface dialog, int which) {
        if (which == DialogInterface.BUTTON_POSITIVE) {
            // add Handler here
        }
        super.onClick(dialog, which);
    }
}

在Xml中代替<EditTextPreference/>引用它,像这样:

<myPackage.CustomEditTextPreference android:dialogTitle="Registration Key" android:key="challengeKey" android:title="Registration Key" android:summary="Click here to enter the registration key you received by email."/>

实际上你不能,因为首选项是使用内部AlertDialog.Builder,并创建一个新的对话框,每次你点击首选项。下一个问题是,对话框生成器为你设置了点击监听器,如果你重写它们,你可能会破坏按钮点击的关闭行为。

这让我很困扰,因为我想要一个只在有效输入时关闭的首选项(否则会显示toast,如果用户不能正确输入,则应该按取消键)。

(如果你真的需要解决这个问题)你可以在这里找到验证DialogPreference的一般解决方案,在这里找到验证EditTextPreference的一般解决方案,这是我自己写的

您的首选项活动似乎没有实现

OnSharedPreferenceChangeListener

您可能想要阅读这个问题的优秀答案:更新EditPreference

最新更新