Да, вы правы, я просто обнаружил, что это 2 года назад. Потому что я изменил EditTextPreference на ValidatedEditTextPreference, как иназарук. Я просто демонстрирую, как его использовать.

у иметь EditTextPreference, который отключит кнопку OK, если в поле EditText нет текста. Я создал собственный класс EditTextPreference и смог получить объект EditText и установить TextWatcher, но не могу найти способ отключить кнопку. Похоже, у меня просто нет доступа к кнопкам OK и Отмена в диалоге.

Кто-нибудь знает способ получить эти кнопки или сделать то, что я пытаюсь сделать?

Единственный другой вариант - попытаться создать с нуля пользовательский диалог, который выглядит и имитирует EditTextPreference.

 Rishabh Srivastava19 авг. 2013 г., 13:58
ты получил душу?

Ответы на вопрос(2)

который включает / отключает кнопку в зависимости от того,onCheckValue функция возвращаетtrue или жеfalse.

public class ValidatedEditTextPreference extends EditTextPreference
{
    public ValidatedEditTextPreference(Context ctx, AttributeSet attrs, int defStyle)
    {
        super(ctx, attrs, defStyle);        
    }

    public ValidatedEditTextPreference(Context ctx, AttributeSet attrs)
    {
        super(ctx, attrs);                
    }

    private class EditTextWatcher implements TextWatcher
    {    
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count){}

        @Override
        public void beforeTextChanged(CharSequence s, int start, int before, int count){}

        @Override
        public void afterTextChanged(Editable s)
        {        
            onEditTextChanged();
        }
    }
    EditTextWatcher m_watcher = new EditTextWatcher();

    /**
     * Return true in order to enable positive button or false to disable it.
     */
    protected boolean onCheckValue(String value)
    {        
        return Strings.hasValue(value);
    }

    protected void onEditTextChanged()
    {
        boolean enable = onCheckValue(getEditText().getText().toString());
        Dialog dlg = getDialog();
        if(dlg instanceof AlertDialog)
        {
            AlertDialog alertDlg = (AlertDialog)dlg;
            Button btn = alertDlg.getButton(AlertDialog.BUTTON_POSITIVE);
            btn.setEnabled(enable);                
        }
    }

    @Override
    protected void showDialog(Bundle state)
    {
        super.showDialog(state);

        getEditText().removeTextChangedListener(m_watcher);
        getEditText().addTextChangedListener(m_watcher);
        onEditTextChanged();
    }    
}
 inazaruk08 февр. 2011 г., 23:35
Я обновил ответ. Я сам проверил этот новый подход, и он работает для меня.
 dmon12 мая 2011 г., 15:21
У меня тоже работает.
 Bob21 янв. 2011 г., 20:46
до сих пор не вижу, как я могу получить доступ к кнопкам. Мне нужно иметь возможность отключить кнопку ОК. То, что вы предлагаете, это просто сделать мой собственный диалог. Если я воспользуюсь этим подходом, я просто создам собственный класс Dialog.
 Rishabh Srivastava21 авг. 2013 г., 09:13
очень хорошо ... работает отлично.

ference в preference.xml.

Я сделал следующее:

Старый код:

<EditTextPreference
    android:dialogMessage="Please input your email"
    android:dialogTitle="Set email"
    android:key="Email"
    android:summary="Your email"
    android:title="-Missed call send to" android:defaultValue="[email protected]"/>

Новый код:

<com.tanggod.missedcall2mail.ValidatedEditTextPreference
    android:dialogMessage="Please input your email"
    android:dialogTitle="Set email"
    android:key="Email"
    android:summary="Your email"
    android:title="-Missed call send to" android:defaultValue="[email protected]"/>
 User952722 июл. 2013 г., 13:15
Да, вы правы, я просто обнаружил, что это 2 года назад. Потому что я изменил EditTextPreference на ValidatedEditTextPreference, как иназарук. Я просто демонстрирую, как его использовать.
 BLaZuRE22 июл. 2013 г., 12:29
Почему оннужно перейти нановый ValidatedEditTextPreference? Очевидно, это не часть API, потому что вам нужно добавить какую-то другую библиотеку, чтобы она работала. Кроме того, вы отвечаете на вопрос, который был задан 2 года назад, поэтому Бобу может и не понадобиться конкретный ответ на этот вопрос.

Ваш ответ на вопрос