我有一个ListView,我想基于一个为每个项目设置不同的颜色
ArrayList<Integer>
如果项目的位置存在于数组中,该项目的背景将为绿色,否则应为红色。我使用SetListColor
来做到这一点,但它不起作用。
public class createtarget extends ListActivity
{
String [] Target;
ListView lstView;
public static ArrayList<Integer> coloredItems;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.createtarget);
coloredItems = new ArrayList<Integer>();
coloredItems.add(1);
lstView = getListView();
lstView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
lstView.setTextFilterEnabled(true);
SetListColor(this.findViewById(android.R.id.content)); // Get View of ListView
Target=new String []{"A","B","C"};
setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, Target));
}
public void SetListColor(View v)
{
for(int i=0;i<lstView.getCount();i++)
{
System.out.println("Item is: "+i);
if(createtarget.coloredItems.contains(i))
v.setBackgroundColor(Color.GREEN);
else
v.setBackgroundColor(Color.Red);
}
}
答案 0 :(得分:2)
要更改列表项,您需要对ListAdapter执行操作,而不是整个列表中的操作。
只需扩展ArrayAdapter并覆盖方法
即可public View getView (int position, View convertView, ViewGroup parent)
在返回之前更改视图的颜色(使用位置找出什么是什么)
该方法的代码看起来应该更像这样(这会根据单元格的位置,偶数或奇数来改变颜色):
@Override
public View getView (int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
if(position%2 == 0)
v.setBackgroundColor(Color.RED);
else
v.setBackgroundColor(Color.WHITE);
return v;
}
注意:此代码尚未经过测试
希望这有帮助
编辑:更正了对getView应用于super的调用。感谢问题的海报谁指出了这一点(不知怎的,他的编辑被拒绝了,不应该这样)。
答案 1 :(得分:1)
我不确定在listview项目上应用颜色的样式,但是编写自定义适配器和设置rowView BackgroundColor之类的一种通用方法。
public View getView(int position, View v, ViewGroup parent) {
if(v!= null)
{
for(int i=0;i<lstView.getCount();i++){
if(createtarget.coloredItems.contains(i))
v.setBackgroundColor(Color.GREEN);
}else{
v.setBackgroundColor(Color.Red);
}
}
}
return v;
}
答案 2 :(得分:1)