gpt4 book ai didi

android - getView 中的自定义 ArrayAdapter setBackground

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:40:03 24 4
gpt4 key购买 nike

我正在开发一个 ListActivity,它将显示一堆数字(权重)。我想更改 ListView 中特定行的背景。为此,我创建了 ArrayAdapter 类的自定义实现并覆盖了 getView 方法。适配器接受数字列表并将数字为 20 的行的背景设置为黄色(为简单起见)。

    public class WeightListAdapter extends ArrayAdapter<Integer> {

private List<Integer> mWeights;

public WeightListAdapter(Context context, List<Integer> objects) {
super(context, android.R.layout.simple_list_item_1, objects);

mWeights = objects;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);

int itemWeight = mWeights.get(position);
if (itemWeight == 20) {
v.setBackgroundColor(Color.YELLOW);
}
return v;
}

}

问题是不仅编号为 20 的行获得黄色背景,编号为 0 的行(即第一行)也获得黄色背景,我不确定为什么会这样。

我是不是在 getView 方法中做错了什么(比如调用 super 方法)?我的实现理由是:所有返回的 View 都应该相同(这就是我调用 super 方法的原因)只有符合 if 条件的 View 应该更改。

感谢您的帮助!

最佳答案

我做了一些研究以找出应该如何正确地完成这项工作。

我正在为遇到同样问题的其他人写下这篇文章,因为我想这是正确的做法。请让我知道,如果我弄错了或者这个解决方案有任何我没有发现的缺陷。

public class WeightListAdapter extends ArrayAdapter<Integer> {

private static final int TYPE_COUNT = 2;
private static final int TYPE_ITEM_COLORED = 1;
private static final int TYPE_ITEM_NORMAL = 0;

public WeightListAdapter(Context context, List<Integer> objects) {
super(context, android.R.layout.simple_list_item_1, objects);
}

@Override
public int getViewTypeCount() {
return TYPE_COUNT;
}

@Override
public int getItemViewType(int position) {
int item = getItem(position);

return (item == 30) ? TYPE_ITEM_COLORED : TYPE_ITEM_NORMAL;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
switch (getItemViewType(position)) {
case TYPE_ITEM_COLORED:
v.setBackgroundColor(Color.YELLOW);
break;
case TYPE_ITEM_NORMAL:
break;
}

return v;

}
}

显然,基类已经实现了确保将正确的 convertView 传递给 getView 方法的逻辑(基于 getViewItemTypegetViewTypeCount 方法)。

关于android - getView 中的自定义 ArrayAdapter setBackground,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008571/

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