Android中具有相同ID冲突的视图元素列表

时间:2019-03-26 09:00:49

标签: android android-fragments

我正在构建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?)

0 个答案:

没有答案