gpt4 book ai didi

android - 我列表中某些项目的不同颜色

转载 作者:行者123 更新时间:2023-11-29 18:22:25 27 4
gpt4 key购买 nike

我有一个包含项目的列表,一些项目可以处于“已查看”状态。我希望这些项目与其他项目具有不同的背景颜色。

ListView 基本上只有一个用于整个列表的选择器,在其中一个项目上设置背景颜色不会起到作用,因为选择器绘制在我的项目布局下方作为背景并依赖于它们是透明的。

有没有办法为列表定义多个选择器?如果没有,是否可以创建一个具有额外状态的选择器?基本上我想要的只是常规列表选择器加上一个额外的状态,它的 ColorDrawable 是在我的 colors.xml 中定义的。我只想添加一个状态,但我该如何强制使用额外的状态?)

最佳答案

找到了答案。我的问题不是选择器的状态,我希望所有项目的选择器都处于相同状态!问题是,如果适配器中项目中的某些 bool 值是假的,我希望项目是常规的,如果 bool 值是真的,颜色是 X,但即使颜色是 X,我仍然希望它在被选择或按下后是透明的。

所以解决方案是下面的xml:

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@android:color/transparent" /> <!-- pressed -->
<item android:state_selected="true"
android:drawable="@android:color/transparent" /> <!-- focused -->
<item android:drawable="@color/viewed_hotels_color" /> <!-- default -->
</selector>

我发现即使列表本身是获取状态的列表,它确实将状态传递给它的子项(即列表项),我认为它没有这样做。只有 android:focused 在这里不会有效,android 列表项没有聚焦但被选中...所以你可以在任何未按下或未选择的状态下看到我给出我的默认颜色,否则它是透明的并且选择器对所有人可见.

在我的适配器中,我需要以下代码(在 getView() 方法中):

View itemView = convertedView; <- i'll spare you the layout details...
Item item = getItem(position);
if( item.isViewed() ){
itemView.setBackgroundResource(R.drawable.viewed_item_background);
}else{
itemView.setBackgroundDrawable(null);
}

这可确保每个项目都获得正确的背景。当然,如果项目状态更改为已查看并且我希望它显示我需要在适配器上调用 notifyDatasetCahnged()。

关于android - 我列表中某些项目的不同颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4680697/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com