Предпочтение по клику - PullRequest
       28

Предпочтение по клику

3 голосов
/ 12 августа 2011

Я создал меню настроек для своего приложения, но мне было интересно, как мне начать работу, когда в меню щелкают Предпочтения? Я хочу, чтобы пользователь мог щелкнуть строку меню с надписью «Изменить пароль» и запустить другое действие, чтобы он мог ввести свой пароль, ввести новый пароль и подтвердить этот новый пароль, чтобы он изменил файл паролей sharedpreferences , Если есть какой-то более простой способ сделать это, я был бы очень признателен за вклад. Спасибо

1 Ответ

7 голосов
/ 23 августа 2011

Почему бы просто не создать свою собственную DialogPreference? Вот шаги:

1) создайте макет для вашего диалога в XML.

2) Расширьте класс DialogPreference платформы Android с помощью собственного пользовательского класса.

3) В конструкторе установите макет диалога с помощью

public CustomDialogPreference(Context context, AttributeSet attrs) {
    super(context, attrs);
    setDialogLayoutResource(R.layout.preference_dialog_number_picker);
}

4) переопределить метод onBindDialogView (View view) и привязать элементы макета к вашему коду. Получите текущее значение пароля из файла SharedPreferences и обработайте проверку с помощью TextChangedListeners, например: если пользователь не подтверждает новый пароль, отобразите ошибку.

@Override
protected void onBindDialogView(View view) {
    // bind view
    mOldPass = (TextView) view.findViewById(R.id.old_pass);
            mNewPass = (TextView) view.findViewById(R.id.new_pass);
            mConfirmPass = (TextView) view.findViewById(R.id.confirm_pass);
            // get the current password from SharedPreferences
            // add text changed listener for handling validation
}

5) переопределить метод onClick (диалоговое окно DialogInterface, int которое). этот метод будет вызван, когда пользователь нажмет кнопку диалога, например, кнопку «ОК». Сохраните новый пароль в файле SharedPreferences.

@Override
public void onClick(DialogInterface dialog, int which) {
    switch (which) {
    case DialogInterface.BUTTON_POSITIVE:
        // save your new password here
        break;
    default:
        // do something else...
        break;
    }
}
...