gpt4 book ai didi

java - Listview - 更改项目的背景颜色

转载 作者:行者123 更新时间:2023-12-01 12:48:40 27 4
gpt4 key购买 nike

我试图更改用户已在 ListView 中单击的行的背景颜色,为此,我使用保存在 SharedPreferences 中的数组列表来延续单击的行的 id,问题是颜色发生变化几乎是随机的。

代码:

    private static class ItemHolder {
public TextView TXTTitle, TXTArtist, TXTid, TXTLikes;
public RelativeLayout back;
}

@Override
public View getView(final int position, View view, ViewGroup root) {
ItemHolder holder = new ItemHolder();

if (view == null) {
view = inflater.inflate(R.layout.list_item, root, false);

RelativeLayout _back = (RelativeLayout) view.findViewById(R.id.bg_item);

holder.back = _back;

// paint oldies
Set<String> _set = new HashSet<String>();
_set = Prefs.getStringSet("arrOfOldies", _set);
for(int i = 0; i <= _set.size() ; i++){
if(_set.contains(IDs.get(position))){
//oldie
holder.back.setBackgroundColor(Color.parseColor("#D0D0D0"));
}
}

view.setTag(holder);
} else {
holder = (ItemHolder) view.getTag();
}
}

我认为这与构建 ListView 的方式有关,问题是什么以及如何解决它?

最佳答案

我会添加曼尼托巴的答案,如果从未选择该项目,您还必须重置背景。了解使用 ConvertView 和项目持有者的要点是重用 View 以进行优化。如果您重复使用已为从未选择过的项目选择的项目的 View :背景颜色仍将位于此处。

尝试:

@Override
public View getView(final int position, View view, ViewGroup root)
{
ItemHolder holder = null;

if (view == null)
{
view = inflater.inflate(R.layout.list_item, root, false);
holder = new ItemHolder();

holder.back = (RelativeLayout) view.findViewById(R.id.bg_item);
view.setTag(holder);
}
else
{
holder = (ItemHolder) view.getTag();
}

// paint oldies
Set<String> _set = new HashSet<String>();
_set = Prefs.getStringSet("arrOfOldies", _set);
for(int i = 0; i <= _set.size() ; i++)
{
if(_set.contains(IDs.get(position)))
{
holder.back.setBackgroundColor(Color.parseColor("#D0D0D0"));
}
else
{
//add this else clause.
holder.back.setBackgroundColor( YOUR_DEFAULT_BACKGROUND_COLOR );
}
}
}

关于java - Listview - 更改项目的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24433424/

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