如何在android listview中替换行颜色?

时间:2015-08-12 07:50:12

标签: android listview android-listview

我是android开发的新手,我遇到了一个问题,我有一个listview使用数组适配器填充,我想在listview中创建奇数行(项)例如,'red'的颜色和偶数行的颜色为'yellow'!我怎么能做到这一点?

这是代码onCreate()方法: -

//defining list view
    listView = (ListView)findViewById(R.id.listView);
    //defining data array list to store retrieved data from database
    data = new ArrayList<String>();
    adapter=new ArrayAdapter<String(this,android.R.layout.simple_list_item_1, data);
    listView.setAdapter(adapter);

onPostExecute()方法: -

protected void onPostExecute(ArrayList<ProductionCommentsTable> result) {
        // TODO Auto-generated method stub
        for (int i = 0; i < result.size(); i++) {       
            data.add("Date: " + result.get(i).getDate().substring(0, 10) + newline + newline +
                    "Item: " + result.get(i).getItem() + newline + newline +
                    result.get(i).getComments());
                if ( i % 2 == 0) {
                    listView.setBackgroundColor(Color.RED);
                } else {
                    listView.setBackgroundColor(Color.YELLOW);
                }
        }
        adapter.notifyDataSetChanged();

提前致谢...

3 个答案:

答案 0 :(得分:2)

您需要使用自定义子布局创建自定义适配器。

getView(...)方法中你必须写出你的逻辑。

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        holder = new ViewHolder();
        convertView = mInflater.inflate("your layout", parent, false);
        holder.backgroundView= (RelativeLayout) convertView.findViewById("Your Background View");
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

           //Your color logic
           if ( position % 2 == 0) {
                holder.backgroundView.setBackgroundColor(Color.RED);
            } else {
                holder.backgroundView.setBackgroundColor(Color.YELLOW);
            }   
    return convertView;
}

以上代码仅供参考而非完整代码,根据您的需要进行更改

答案 1 :(得分:1)

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>
                (this, android.R.layout.simple_list_item_1, fruits_list){
            @Override
            public View getView(int position, View convertView, ViewGroup parent){
                // Get the current item from ListView
                View view = super.getView(position,convertView,parent);
                if(position %2 == 1)
                {
                    // Set a background color for ListView regular row/item
                    view.setBackgroundColor(Color.parseColor("#FFB6B546"));
                }
                else
                {
                    // Set the background color for alternate row/item
                    view.setBackgroundColor(Color.parseColor("#FFCCCB4C"));
                }
                return view;
            }
        };

答案 2 :(得分:0)

这是你怎么做的: 首先,创建一个扩展BaseAdapter的CustomList类:

public class ListCompaniesAdapter extends BaseAdapter {
public List<String> items;
Context c;
public ListCompaniesAdapter(Context c,List<String> items){
    this.c=c;
    this.items=items;
}
@Override
public int getCount() {
    return items.size();
}

@Override
public Object getItem(int position) {
    return items.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        LayoutInflater mInflater = (LayoutInflater)
                c.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        // Your layout here should be RelativeLayout with a textview as a    child
        convertView = mInflater.inflate(R.layout.industry_item, null);
    }
    title=(TextView) convertView.findViewById(R.id.name);
    title.setText(items.get(position));
    if ( position % 2 == 0) {
            convertView.backgroundView.setBackgroundColor(Color.RED);
        } else {
            convertView .backgroundView.setBackgroundColor(Color.YELLOW);
        }   
    return convertView;
}
}

现在,在你的帖子中执行这就是你的工作方式:

protected void onPostExecute(ArrayList<ProductionCommentsTable> result) {
    // TODO Auto-generated method stub
    for (int i = 0; i < result.size(); i++) {       
        data.add("Date: " + result.get(i).getDate().substring(0, 10) + newline + newline +
                "Item: " + result.get(i).getItem() + newline + newline +
                result.get(i).getComments());
    }
    adapter.notifyDataSetChanged();

这是onCreate:

listView = (ListView)findViewById(R.id.listView);
//defining data array list to store retrieved data from database
data = new ArrayList<String>();
adapter=new ListCompaniesAdapter(this,data);
listView.setAdapter(adapter);