如何更改添加到列表视图的最后一项的背景颜色?

时间:2012-11-08 17:04:42

标签: android listview background-color

我对列表视图很困惑。我想在列表的最后添加的行中添加一个特定的颜色,我该怎么做?我用谷歌搜索了所有的互联网和stackoverflow 2天,但我无法弄清楚如何??

我试过了

lv.getChildAt(lv.getLastVisiblePosition()). setBackgroundColor(Color.RED);
到目前为止没有成功。我把randowm排着色了。但我只想为最近添加的项目着色。

有人可以就此提出建议。

任何评论都非常感谢。

干杯

3 个答案:

答案 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或一个数组或另一个适合你的要求)