我对列表视图很困惑。我想在列表的最后添加的行中添加一个特定的颜色,我该怎么做?我用谷歌搜索了所有的互联网和stackoverflow 2天,但我无法弄清楚如何??
我试过了
lv.getChildAt(lv.getLastVisiblePosition()). setBackgroundColor(Color.RED);
到目前为止没有成功。我把randowm排着色了。但我只想为最近添加的项目着色。
有人可以就此提出建议。
任何评论都非常感谢。
干杯
答案 0 :(得分:3)
由于效率原因,适配器有一个视图回收器,所以这就是“随机性”来自......的情况
无论如何,只需创建一个自定义适配器来跟踪添加的最后一行的索引,并在getView()
中检查当前索引是否与最后一个索引匹配:
在Google会谈中观看Android的Romain Guy explain the view recycler。
以下是扩展ArrayAdapter的示例:
public class MyArrayAdapter<T> extends ArrayAdapter<T> {
private int lastAdded;
public MyArrayAdapter(Context context, int textViewResourceId, List<T> objects) {
super(context, textViewResourceId, objects);
lastAdded = objects.size() - 1;
}
@Override
public void add(T object) {
lastAdded = getCount();
super.add(object);
};
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if(position == lastAdded) // Red
view.setBackgroundColor(0xffff0000);
else // Transparent
view.setBackgroundColor(0x00000000);
return view;
}
@Override
public void insert(T object, int index) {
lastAdded = index;
super.insert(object, index);
};
}
注意:这不全面。根据您使用适配器的方式,还有其他方法可以添加您可能想要或不想覆盖的数据。
答案 1 :(得分:0)
通过该电话lv.getChildAt(lv.getLastVisiblePosition())
,您将获得当前在屏幕上显示的最后一个孩子。
如果您想更改列表最后一项的任何内容,您必须在适配器的getView
内查看if(position == getCount()-1){ }
并在那里进行操作。
答案 2 :(得分:0)
您可以使用customadapter进行此操作,并覆盖getView()可以帮助您完成任务。
public View getView (int position, View convertView, ViewGroup parent){
// some task
if(position == last) // once even try position == getCount()
{
set background color to the view
}
return convertView;
}
这里最后一个是你要向列表视图膨胀的最后一项(可能是一个arraylist或一个数组或另一个适合你的要求)