33
public class ListView extends  ListActivity {

static String item;

public void onCreate(Bundle icicle) {
            super.onCreate(icicle);

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, Str.S);
            setListAdapter(adapter);

      }

This is my list view class which works nice and it takes the strings from a class called Str and display them in a listview, the problem is the listview style isn't nice, it's black with the strings in white.

I want them to be alternative each row has a color.

I tried many tutorials but none was clear enough .. How do I make Alternative Color for each row .. ex. row1 Blue, row 2 White, row 3 Blue, row 4 White, etc..

Tash Pemhiwa
  • 7,590
  • 4
  • 45
  • 49
Yerry Huntry
  • 1,195
  • 2
  • 9
  • 7
  • 1
    can you give us examples of what you tried? then it will be easier to explain where things went wrong – Sheena Oct 28 '12 at 14:51

4 Answers4

97

Here is how to do that.

My example code is given here in brief:

Override the getView method in your adapter:

@Override
public View getView(int position, View convertView, ViewGroup parent) {  
View view = super.getView(position, convertView, parent);  
if (position % 2 == 1) {
    view.setBackgroundColor(Color.BLUE);  
} else {
    view.setBackgroundColor(Color.CYAN);  
}

return view;  
}

Override ArrayAdapter and override getView method there.

So if your adapter is something like this:

public class MyAdapter extends ArrayAdapter

Your ListActivity will change like this:

 ArrayAdapter<String> adapter = new MyAdapter<String>(this,
                android.R.layout.simple_list_item_1, Str.S);

Here's an example about overriding ArrayAdapter.

Suraj Bajaj
  • 6,630
  • 5
  • 34
  • 49
  • 1
    I tried this, no error but how to implement it to my listview .. ? – Yerry Huntry Oct 28 '12 at 14:53
  • 1
    Umm, My whole class is in the question its ListActivity not ArrayAdapter .. IDK what to do i don't have a getView so how i override it .. – Yerry Huntry Oct 28 '12 at 15:07
  • 1
    Look, you don't have to override anything ListActivity. Create a new class MyAdapter extending ArrayAdapter. Now in your class shown above change ArrayAdapter to MyAdapter as I mentioned in the answer. That's it! Let me know if you have any more questions. – Suraj Bajaj Oct 28 '12 at 15:10
  • 1
    Okay, thanks. I get two error. 1- from MyAdapter changed in my class "The type MyAdapter is not generic; it cannot be parameterized with arguments " and from MyAdapter class "Implicit super constructor ArrayAdapter() is undefined for default constructor. Must define an explicit constructor" – Yerry Huntry Oct 28 '12 at 15:14
  • 1
    Show me your implementation of ArrayAdapter. i.e. the MyAdapter class. – Suraj Bajaj Oct 28 '12 at 15:15
  • 1
    You missed the constructor. Create a constructor for MyAdapter. – Suraj Bajaj Oct 28 '12 at 15:21
  • there is a lot of constructors which one I choose ? sorry I'm new – Yerry Huntry Oct 28 '12 at 15:31
  • 1
    The android samples contain a lot of listview examples. Have a look at those, they show you how to implement the adapter in detail. – Christine Oct 28 '12 at 15:38
  • See.. Your code in ListActivity is now new MyAdapter(this, android.R.layout.simple_list_item_1, Str.S); So write a constructor like this: MyAdapter (Context context, int resource, String[] values); Updating answer with a link. – Suraj Bajaj Oct 28 '12 at 15:38
  • Glad that helped. At StackOverflow, we thank by accepting the answer. (Green tick mark) You're welcome! :) – Suraj Bajaj Oct 28 '12 at 15:41
  • Nice solution, and nice reference link you gave there! Worked for me pretty good! – Nirav Zaveri Nov 20 '14 at 13:11
4
if (position % 2 == 0) {

    rowView.setBackgroundColor(Color.parseColor("#A4A4A4"));

} else {

    rowView.setBackgroundColor(Color.parseColor("#FFBF00"));

}
TobiasR.
  • 826
  • 9
  • 19
1

The Background color for a custom listview row can be set with

row.setBackgroundResource(R.color.list_bg_2)

method in custom listview adapter in

getView(int position, View convertView, ViewGroup parent)

I have tried many things like row.setBackgroundColor(0xFF00DD) but couldn't get it done,

here list_bg_2 is a color set res/values/color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="list_bg_1">#ffffff</color>
    <color name="list_bg_2">#fef2e8</color>
</resources>
Pang
  • 9,564
  • 146
  • 81
  • 122
Farrukh
  • 19
  • 1
0

if view is ViewGroup, simple background setting doesn't work

@Override
public View getView(int position, View convertView, ViewGroup parent) {  
    final int rr = (position % 2 == 0) ? R.color.border_end_1 : R.color.black;
    final int cc = getResources().getColor(rr);
    View view = super.getView(position, convertView, parent);  
    walk(view, rr, cc);
    return view;  
}
private void walk(View view, int rr, int cc){
    view.setBackgroundResource(rr);
    ViewGroup group = (ViewGroup)view;
    int nc = group.getChildCount();
    for (int i = 0; i < nc; i++) {
        final View v = group.getChildAt(i);
        if (v instanceof ViewGroup)
            walk(v, rr, cc);
        else
            v.setBackgroundColor(cc);
    }
}