我正在构建Android中非滚动的垂直元素列表。最多只有4个项目,因此我发现没有理由使用ListView
,尤其是因为我不需要滚动。
一个项目是:
- ConstraintLayout
--TextView (R.id.title)
--ProgressBar (R.id.progress)
我的片段有一个LinearLayout
的基本元素和一个数据元素列表,我将其转换为上面看到的视图。
伪:
listOfData.map(Element -> {
InflateView
Bind Element Data
}).foreach(rootView::addView)
我还存储了最终的rootView(带有项目视图),因此,当下次恢复Fragment时,不需要重新创建视图。
一切正常。该视图包含我的项目及其各自的值(TextView文本和ProgressBar进度)。酷!
问题: 当我切换选项卡并返回到片段时,我所有的ProgressBar进度都设置为最后一项进度值。
我做了一些调试,它没有从我的数据源中重新读取值。它只是简单地重新使用本地存储的rootView元素。我希望它的状态与离开片段前的状态相同。
经过更多调试后,ProgressBars
的值在OnCreateView和OnActivityCreated
之间变化。 (在OnCreateView
的末尾,该视图仍包含正确的值)
现在,最有趣的是只有ProgressBar
的值被弄乱了-TextView
的值是正确的(与离开Fragment
之前的值一样)!
理论上,我可以重新绑定每个OnResume
上的所有数据以显示最新值。但是没有必要这样做,因为自初始负载以来,预计值不会改变。
有人经历过吗,原因可能是什么?
(这可能与以下事实有关:每个单项视图对于TextView和ProgressBar具有相同的ID。但是在创建片段时,它们都可以正常工作。这不是ListView在做什么吗?因此,为什么只影响ProgressBar而不影响TextView?)