Android ListView设置项目背景

时间:2014-11-06 04:36:31

标签: android android-listview android-adapter

我似乎无法弄清楚如何使一个或多个listview项目背景改变颜色。

我目前正在尝试通过适配器获取视图。

ViewGroup v = (ViewGroup) adapter.getView(i, null, listView);
for(int k = 0; k < v.getChildCount(); k++) {
    View child = v.getChildAt(k);
    child.setBackgroundColor(0xFFA6D2FF);
}
listView.invalidateViews();

我尝试过设置包含文本项的ViewGroup v(列表视图项有子项,因此它有2个文本视图)。我也试过设置孩子背景,这可能有效,但看起来他们的界限是0。所以它可能有效,但即使你能看到文字,孩子也没有大小。

4 个答案:

答案 0 :(得分:1)

最好从自定义基本适配器更改项目的颜色,创建以下方法:

private int[] colors;

// In Constructor or whenever you get data
colors = new int[sizeOfList];

private void setColors(int[] positions, int color) {
  for (int pos : positions) {
    colors[pos] = color;
   }
   notifyDataSetChanged();
}

private void setColors(int position, int color) {
   colors[pos] = color;
   notifyDataSetChanged();
}

public View getView(...) {

  if (colors[position] != 0) {

    child.setBackgroundColor(colors[position]);

  } else {

    child.setBackgroundColor(// default color);

  }

  return view;

}

希望它有所帮助。我认为其他答案也建议你这样做。 :)

答案 1 :(得分:0)

如果我正确理解您的代码,您希望为列表项中的每个视图提供背景颜色。

如果您想以以编程方式(而不是通过XML)执行此操作,我认为最简单的方法是创建自定义适配器并设置{{1} (视图)背景颜色。

当然,您可以通过XML轻松完成此任务。

有关详情,请参阅此处:http://www.vogella.com/tutorials/AndroidListView/article.html#tutorial_ownadapter

如果您有任何问题或者如果我想念您,请随意发表评论。

答案 2 :(得分:0)

当您调用listView.invalidateViews();时,它将使用适配器的getView()方法并绘制视图。如果要在ListView中更改视图的背景颜色,最好的位置是在适配器的getView()中进行。

@Override
  public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.rowlayout, parent, false);
    rowView.setBackgroundColor(0xFFA6D2FF);
    return rowView;
  }

答案 3 :(得分:0)

据我了解。这应该通过在自定义适配器的getView方法中创建自定义视图来完成。

公共类MyAdapter扩展了BaseAdapter {

     public Activity activity;
     ArrayList<String> data = new ArrayList<String>();
     private static LayoutInflater inflater = null;

     public MyAdapter(Activity a, ArrayList<String> d) {
      activity = a;
      data = d;
      inflater = LayoutInflater.from(activity);
      }    

   @Override
   public View getView(final int position, View convertView, ViewGroup parent) {

        ViewHolder holder = null;

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.my_list_item, null);
            holder = new ViewHolder();
            convertView.setTag(holder);

        } else {
            holder = (ViewHolder)convertView.getTag();
        }

   convertView.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {

           //Touch on view handle
         Log.d("", "Touched row "+position);
      }

   });

   //customizing view
    holder.textView = (TextView)convertView.findViewById(R.id.my_textview);
   holder.textView.setText(data.get(position));

   return convertView;
 }       

  public static class ViewHolder {
     public TextView textView;
  }
 @Override
  public int getCount() {
     return data.size();
  }
 @Override
 public Object getItem(int position) {
     return position;
 }
@Override
 public long getItemId(int position) {
     return position;
}

}

Background each row in listview