【问题标题】:List value gets altered on orientation change列表值在方向更改时更改
【发布时间】:2012-01-24 11:22:49
【问题描述】:

参考下面的截图,ListView 由 3 个TextView 组成。

根据第3个TextView的值,分别给第3个TextView的文本分配颜色。

即1.) 如果值>0

,则为绿色

2.)红色如果值

3.) 如果 value=0(默认)则为白色

在适配器内部使用以下代码 sn-p。

if (Float.parseFloat(map.get(RecentChg_COLUMN)) > 0) {
            holder.tvRecentChg.setTextColor(Color.GREEN);
        }

else if (Float.parseFloat(map.get(RecentChg_COLUMN)) < 0) {
            holder.tvRecentChg.setTextColor(Color.RED);
        }

第一个屏幕显示正确的输出。

但在方向改变时,输出如第二个屏幕所示。

让我们专注于 SHARIABEES,其中 value=0.0

最初它显示为白色,但在方向改变时它的颜色变为红色。

我不知道为什么会这样。

欢迎提出任何建议......

【问题讨论】:

  • Note that if value is &gt;0 or &lt;0, everything works fine. Problem arises when value=0 嗯,为什么,哦,为什么....因为当值为 0 时您不设置颜色...即使您使用的是“持有人模式“(复制粘贴编程ftw,呵呵)
  • 感谢您的建议,但listview optimization 是什么意思。我是android开发的新手,所以我不知道。
  • google.com/events/io/2010/sessions/… ... 只是 ... lv 没有为每行创建行视图 ... lv 只创建可见行 + 几个并重用它... 所以你有可能'会得到以前是“红色”或“绿色”的行,这就是为什么你还应该为 value == 0 添加代码

标签: android orientation android-listview textview


【解决方案1】:

将 else 部分也设置为 value = 0

if (Float.parseFloat(map.get(RecentChg_COLUMN)) > 0) {
        holder.tvRecentChg.setTextColor(Color.GREEN);
    }

else if (Float.parseFloat(map.get(RecentChg_COLUMN)) < 0) {
        holder.tvRecentChg.setTextColor(Color.RED);
    }
else if (Float.parseFloat(map.get(RecentChg_COLUMN)) == 0) {
        holder.tvRecentChg.setTextColor(Color.WHITE);
    }

并在你的标签中的 androidmanifest.xml 文件中设置这个

<activity android:name=".HomeActivity" android:label="@string/app_name" android:configChanges="orientation">

【讨论】:

  • 我已经完成了一段时间的第二部分,但添加第三个条件对我有用。但是为什么必须这样做?
  • 因为单个列表条目的视图被 android 框架重用。通过这种方式,您可以拥有包含大量条目( >1000 )的快速滚动列表。但是这样做的代价是您不能假设您现在正在填充的列表条目处于默认状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多