Я строю вертикальный список элементов без прокрутки в Android.Максимум 4 элемента, поэтому я не вижу смысла использовать ListView
, особенно потому, что мне не нужна прокрутка.
Единственный элемент:
- ConstraintLayout
--TextView (R.id.title)
--ProgressBar (R.id.progress)
Мой фрагмент имеетбазовый элемент LinearLayout
и список элементов данных, которые я преобразую в представления, показанные выше.
Псевдо:
listOfData.map(Element -> {
InflateView
Bind Element Data
}).foreach(rootView::addView)
Я также сохраняю окончательный rootView (с представлениями элементов), поэтому при следующем возобновлении фрагмента не требуется повторное создание представления.
Все отлично работает.Представление содержит мои элементы с их индивидуальными значениями (TextView text и ProgressBar progress).Круто!
Проблема: Когда я переключаю вкладку и возвращаюсь к фрагменту, весь мой прогресс ProgressBar устанавливается на значение прогресса последнего элемента.
Я выполнил некоторую отладку, и она не перечитывает значения из моего источника данных.Он просто повторно использует локально сохраненный элемент rootView.Я ожидаю, что оно будет в том же состоянии, которое я оставил перед тем, как покинуть фрагмент.
После дополнительной отладки значения ProgressBars
меняются между OnCreateView и OnActivityCreated
.(В конце OnCreateView
представление все еще содержит правильные значения)
Теперь самое интересное, что только ProgressBar
значения испорчены - значения TextView
верны (как и раньшеоставляя Fragment
)!
Теоретически я могу повторно связать все данные на каждом OnResume
, чтобы отобразить актуальные значения.Но в этом нет необходимости, поскольку с момента начальной загрузки значения не должны меняться.
Кто-нибудь испытывал это и в чем причина?
(Возможно, это связано с тем, что у каждого отдельного элемента одинаковые идентификаторы для TextView и ProgressBar. Но все работало нормально при создании фрагмента. И это не то, что делает ListView? И если да, то почему влияет только ProgressBar, а не TextView?)