如何调用EditTextPreference中的ok按钮

时间:2011-09-23 10:54:51

标签: android android-preferences

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

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

3 个答案:

答案 0 :(得分:3)

实际上你不能,因为首选项是使用内部AlertDialog.Builder并在每次单击首选项时创建一个新对话框。下一个问题是对话框构建器为您设置了单击侦听器,如果您覆盖它们,则可能会破坏按钮单击的关闭行为。

这让我感到困扰,因为我想要一个仅在有效输入时关闭的偏好(否则会显示吐司,如果他无法正确使用,则用户应该按取消。)

(如果你真的需要一个解决方案来解决这个问题)你可以找到我自己编写的验证DialogPreference here和验证EditTextPreference here的一般解决方案

答案 1 :(得分:3)

您可以扩展EditTextPreference以控制点击处理程序。

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."/>

答案 2 :(得分:1)

您的偏好活动似乎没有实施

  

OnSharedPreferenceChangeListener

您可能想要阅读问题的优秀答案:Updating EditPreference