我对列表列表视图感到很困惑。我想在列表中最后添加的行中添加特定的颜色,我该怎么做?我已经用谷歌搜索了所有的互联网和 stackoverflow 2 天,但我不知道怎么做??
我努力了
lv.getChildAt(lv.getLastVisiblePosition()). setBackgroundColor(Color.RED);
但到目前为止还没有成功。我得到了随机行的颜色。但我只想为最近添加的项目着色。
有人可以给我建议吗。
任何评论都非常感谢。
干杯
我对列表列表视图感到很困惑。我想在列表中最后添加的行中添加特定的颜色,我该怎么做?我已经用谷歌搜索了所有的互联网和 stackoverflow 2 天,但我不知道怎么做??
我努力了
lv.getChildAt(lv.getLastVisiblePosition()). setBackgroundColor(Color.RED);
但到目前为止还没有成功。我得到了随机行的颜色。但我只想为最近添加的项目着色。
有人可以给我建议吗。
任何评论都非常感谢。
干杯
出于效率原因,适配器有一个视图回收器,所以这就是“随机性”的来源......
无论如何,只需创建一个自定义适配器来跟踪添加的最后一行的索引并getView()
检查当前索引是否与最后一个索引匹配:
在 Google Talks 上观看 Android 的 Romain Guy解释视图回收器。
这是一个扩展 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);
};
}
注意:这并不全面。根据您使用适配器的方式,还有其他方法可以添加您可能想要或不想覆盖的数据。
您可以为此使用 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;
}
最后是您将膨胀到列表视图的最后一项(可能是数组列表或数组或其他适合您要求的项目)
通过该电话,lv.getChildAt(lv.getLastVisiblePosition())
您将获得最后一个可见且当前在屏幕上的孩子。
如果您想更改列表最后一项上的任何内容,则必须在getView
适配器内部进行检查if(position == getCount()-1){ }
并在那里对其进行处理。