как вызвать кнопку ОК в EditTextPreference - PullRequest
2 голосов
/ 23 сентября 2011

У меня есть EditTextPreference в PreferenceActivity. Когда пользователь нажмет EditTextPreference, появится диалоговое окно. В диалоговом окне пользователь может ввести значение, а в диалоговом окне есть кнопки «ОК» и «Отмена». Я хочу вызвать событие нажатия кнопки ok , чтобы проверить значение, но я не знаю, как даже вызвать щелчок.

Я знаю, что могу использовать EditTextPreference.setOnPreferenceChangeListener(), но я хочу знать, могу ли я использовать событие нажатия кнопки ОК.

Ответы [ 3 ]

3 голосов
/ 23 сентября 2011

На самом деле вы не можете, так как предпочтение использует внутренний AlertDialog.Builder и создает новый диалог каждый раз, когда вы щелкаете по предпочтению.Следующая проблема заключается в том, что построитель диалогов устанавливает прослушиватель щелчков для вас, и если вы переопределите их, вы можете уничтожить поведение при нажатии кнопки.

Это беспокоило меня, поскольку я хотел, чтобы предпочтение закрывалось только при действительном вводе(в противном случае отображается тост, и пользователь должен нажать «Отмена», если он не может сделать это правильно).

(Если вам действительно нужно решение именно для этой проблемы) Вы можете найти общее решение для проверки DialogPreference здесь и проверочный EditTextPreference здесь , который я написал сам.

3 голосов
/ 13 декабря 2013

Вы можете расширить 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."/>
1 голос
/ 23 сентября 2011

Ваша предпочтительная деятельность, по-видимому, не реализует

OnSharedPreferenceChangeListener

Вы можете прочитать превосходный ответ на вопрос: Обновление EditPreference

...