我在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