0

我对列表列表视图感到很困惑。我想在列表中最后添加的行中添加特定的颜色,我该怎么做?我已经用谷歌搜索了所有的互联网和 stackoverflow 2 天,但我不知道怎么做??

我努力了

lv.getChildAt(lv.getLastVisiblePosition()). setBackgroundColor(Color.RED);

但到目前为止还没有成功。我得到了随机行的颜色。但我只想为最近添加的项目着色。

有人可以给我建议吗。

任何评论都非常感谢。

干杯

4

3 回答 3

4

出于效率原因,适配器有一个视图回收器,所以这就是“随机性”的来源......
无论如何,只需创建一个自定义适配器来跟踪添加的最后一行的索引并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);
    };
}

注意:这并不全面。根据您使用适配器的方式,还有其他方法可以添加您可能想要或不想覆盖的数据。

于 2012-11-08T17:09:57.503 回答
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;
}

最后是您将膨胀到列表视图的最后一项(可能是数组列表或数组或其他适合您要求的项目)

于 2012-11-08T17:24:58.297 回答
0

通过该电话,lv.getChildAt(lv.getLastVisiblePosition())您将获得最后一个可见且当前在屏幕上的孩子。

如果您想更改列表最后一项上的任何内容,则必须在getView适配器内部进行检查if(position == getCount()-1){ }并在那里对其进行处理。

于 2012-11-08T17:18:30.607 回答