Пользовательский список предпочтений в AndroidX - PullRequest
1 голос
/ 15 марта 2020

Я настроил свою страницу настройки приложения Android, я использую API 21 или 26. Я добавил класс CustomListPreference java, который был унаследован от ListPreference, и интегрировал его в SettingActivity.

Но, Я убедился, что система не работает, так как у SettingActivity есть фрагмент Setting, унаследованный от androidx.preference.PreferenceFragmentCompat, и пакеты, используемые для действия Activity, следующие:

  • androidx .preference .Preference
  • androidx .preference.ListPreference
  • androidx .preference.PreferenceFragmentCompat

Если я использую пакеты android .preference.Preference и android .preference.ListPreference для моей Custom ListPreference, весь мой код перестает работать, когда Android создает объекты для настройки Activity. Сбой сразу после пользовательского конструктора ListPreference с ошибкой « Ошибка надувания класса com.signatact.doorbell.dialog.preference.AppListPreference ». Копаясь в деталях, я обнаружил, что причина cra sh в качестве последнего шага создания нового объекта для Setting Activity - приведение к androidx.preference.Preference:

из PreferenceInflater. java:

import androidx.preference;
...
return (Preference) constructor.newInstance(args); // line 242

Понятно, что система дает сбой при приведении между android .preference.Preference и androidx.preference.Preference. .

Однако, если я перенесу свою собственную реализацию файла ListPreference на androidx, почти все методы, которые я использовал ранее для настройки, будут недоступны, то есть список методов, которые недоступны, куда я положил свой custom logi c:

// Ошибка (и): методы не переопределяют методы из своего суперкласса

@Override
    protected void onPrepareDialogBuilder(AlertDialog.Builder builder)
...
@Override
    protected void onDialogClosed(boolean positiveResult)

Похоже, Google кардинально изменил их API, кто-нибудь может дать представление, как в AndroidX можно настроить ListPreference? В общем, мне нужны стандартные вещи для настройки следующим образом:

  • В строке у меня есть пользовательский набор элементов управления (3 элемента - 2x текстовых поля и 1 флажок) - я строю собственный макет для каждой строки в onPrepareDialogBuilder с моим пользовательским ArrayAdapter для списка
  • Мне нужно динамически обновить значения CustomListPreference. Я заполняю эти значения в onResume в SettingActivity
  • Мне нужно получить обратный вызов, когда список нажат и выбрано новое значение

Я нашел здесь только одно практическое руководство для моего случая: следующим образом: Как изменить внешний вид диалогового окна ListPreference , но оно ограничено и кратко. Я проанализировал AndroidX API, и мне кажется, что мне нужно больше времени, чтобы найти решение, и поэтому любая помощь / идея приветствуются ...

Спасибо, Влад.

...