Я настроил свою страницу настройки приложения 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, и мне кажется, что мне нужно больше времени, чтобы найти решение, и поэтому любая помощь / идея приветствуются ...
Спасибо, Влад.