Разница между DialogPreference до и после AndroidX - PullRequest
0 голосов
/ 11 октября 2018

В настоящее время мы осуществляем переход на пространство имен Androidx с нашим проектом приложения для Android.Однако я заметил, что изменилось не только пространство имен.Для DialogPreference также отсутствуют некоторые интерфейсы, которые использовались ранее

Напримеркажется, что отсутствуют следующие методы: onBindDialogView, showDialog, onDialogClosed.

Поскольку мы используем некоторые из этих методов для влияния на поведение диалога по умолчанию, мне неясно, как мне теперь реализовать эту функциональность.Например, мы проверяем ввод перед закрытием диалога, мы сохраняем значение в базе данных вместо общих настроек и добавляем некоторые динамические элементы в диалог.

Кто-нибудь еще сталкивался с этой проблемой и нашел решение??Я что-то пропустил в документации?Есть ли другая концепция, которую мы можем / должны использовать?

Можно было бы использовать фрагменты вместо DialogPreference, но для небольших объемов контента (например, списка элементов дерева, из которых пользователь может выбирать) это кажется большим количеством накладных расходов для меня ...

1 Ответ

0 голосов
/ 14 ноября 2018

Начиная с исходных файлов androidx, я перенес пользовательские классы на основе старых DialogPreference на новые androidx.preference.DialogPreference , выполнив следующую процедуру:

Шаг1

Старый пользовательский класс диалога (например, CustomDialogPreference), основанный на устаревшем DialogPreference, должен быть разделен на два отдельных класса:

  1. Один класс (например, CustomPreference) должен расширяться androidx.preference.DialogPreference и будет содержать только код, связанный с обработкой предпочтений (управление данными).
  2. Другой класс (например, CustomDialog) должен расширять androidx.preference.PreferenceDialogFragmentCompat и будет содержать толькокод, относящийся к обработке диалогов (пользовательский интерфейс), включая onDialogClosed .Этот класс должен предоставлять статический метод newInstance для возврата экземпляра этого класса.

Шаг 2

В основных настройках обработки фрагментов на основе PreferenceFragmentCompat метод onDisplayPreferenceDialog должен быть переопределен для отображения настраиваемого диалога, например:

    private static final String DIALOG_FRAGMENT_TAG = "CustomPreference";

    @Override
    public void onDisplayPreferenceDialog(Preference preference) {
        if (getFragmentManager().findFragmentByTag(DIALOG_FRAGMENT_TAG) != null) {
            return;
        }

        if (preference instanceof CustomPreference) {
            final DialogFragment f = CustomDialog.newInstance(preference.getKey());
            f.setTargetFragment(this, 0);
            f.show(getFragmentManager(), DIALOG_FRAGMENT_TAG);
        } else {
            super.onDisplayPreferenceDialog(preference);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...