Как вызвать кнопку ОК в EditTextPreference
У меня есть EditTextPreference
в PreferenceActivity
, Когда пользователь нажимает EditTextPreference
покажет диалог. В диалоговом окне пользователь может ввести значение, а в диалоговом окне есть кнопки "ОК" и "Отмена". Я хочу вызвать событие нажатия кнопки ОК, чтобы проверить значение, но я даже не знаю, как вызвать вызов.
Я знаю, что могу использовать EditTextPreference.setOnPreferenceChangeListener()
, но я хочу знать, могу ли я использовать событие нажатия кнопки ОК.
3 ответа
На самом деле вы не можете, так как предпочтение использует внутренний AlertDialog.Builder
и создает новый диалог каждый раз, когда вы нажимаете предпочтение. Следующая проблема заключается в том, что построитель диалогов устанавливает прослушиватель щелчков для вас, и если вы переопределите их, вы можете разрушить близкое поведение нажатия кнопки.
Это беспокоило меня, так как я хотел, чтобы предпочтение закрывалось только при правильном вводе (в противном случае отображается тост, и пользователь должен нажать "Отмена", если он не может сделать это правильно).
(Если вам действительно нужно решение именно для этой проблемы) Вы можете найти общее решение о проверке DialogPreference
здесь и проверка EditTextPreference
вот что я написал сам.
Вы можете расширить 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."/>
Ваша предпочтительная деятельность, по-видимому, не реализует
OnSharedPreferenceChangeListener
Вы можете прочитать превосходный ответ на вопрос: Обновление EditPreference