不使用CustomAdapter更改ListView特定行的背景颜色

时间:2017-04-14 22:55:15

标签: java android listview

我正在尝试更改ListView中特定行的背景颜色,以匹配List<String> hexcodeList中包含十六进制代码颜色的特定颜色。但是,我没有使用CustomAdapter,而是从getView覆盖ArrayAdapter。我希望第一行有我的列表的第一种颜色,第二行有第二种颜色,依此类推。我是Java的新手,我的第一个想法是使用for语句,所以下面的代码是我尝试过但没有成功,因为这会使用hexcodeList的最后一种颜色更改所有行的背景颜色。

ListView CoresListView = (ListView) findViewById(R.id.ListViewId);  
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, hexcodeList){
    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        View view = super.getView(position,convertView,parent);
        for (position = 0; position < hexcodeList.size(); position++) {
            view.setBackgroundColor(Color.parseColor(hexcodeList.get(position)));
        }
        return view;
    }
};

CoresListView.setAdapter(adapter);

2 个答案:

答案 0 :(得分:2)

在创建的每个视图上,您​​循环遍历列表并设置所有颜色,以便为每个视图设置最后一种颜色。

删除循环,然后写下:

view.setBackgroundColor(Color.parseColor(hexcodeList.get(position)));

为每个视图调用getView(...),因此需要循环。

答案 1 :(得分:1)

您不需要循环,因为getView()始终为每个行项目视图调用。

试试这个:

ListView CoresListView = (ListView) findViewById(R.id.ListViewId);  
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, hexcodeList){
    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        View view = super.getView(position,convertView,parent);
        view.setBackgroundColor(Color.parseColor(hexcodeList.get(position)));

        return view;
    }
};

CoresListView.setAdapter(adapter);