Android - ListView with two different colors

I have a ListView and I want to change its Backgroundcolor. It should be like that. 1.Item = gray; 2. The subject; white; 3. Element = gray; 4. Item = white, etc. Therefore, it should have 2 backgrounds. I am trying to archive this for almost 2 hours. I'm embarassing. I can’t get up with a decision. I hope one of you can help me.

I tried:

for(int counter = 0; counter < itemList.size(); counter++){ if( adapter.getItem(position) %2 == 1 ){ Layout.setBackgroundColor(Color.GREY) }; else{ Layout.setBackgroundColor(Color.WHITE); } 

So here is my hole code. I hope one of you tells me:

Mainactivity

 public class MainActivity extends Activity implements OnItemClickListener { ListView lview3; ListViewCustomAdapter adapter; private ArrayList<Object> itemList; private ItemBean bean; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); prepareArrayLits(); lview3 = (ListView) findViewById(R.id.listView1); adapter = new ListViewCustomAdapter(this, itemList); lview3.setAdapter(adapter); lview3.setOnItemClickListener(this); } public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) { // TODO Auto-generated method stub RelativeLayout Layout = (RelativeLayout) findViewById(R.id.relativeLayout1); ItemBean bean = (ItemBean) adapter.getItem(position); for(int counter = 0; counter < itemList.size(); counter++){ adapter.getItem(position); Layout.setBackgroundColor(Color.CYAN);} Toast.makeText(this, "Title => "+bean.getTitle()+" \n Description => "+bean.getDescription(), Toast.LENGTH_SHORT).show(); } /* Method used to prepare the ArrayList, * Same way, you can also do looping and adding object into the ArrayList. */ public void prepareArrayLits() { itemList = new ArrayList<Object>(); AddObjectToList(R.drawable.ic_add, "add", "Add desc", "2"); AddObjectToList(R.drawable.ic_delete, "Delete", "Delete desc", "2"); AddObjectToList(R.drawable.ic_down, "Down", "Down desc", "2"); AddObjectToList(R.drawable.ic_info, "Information", "Information desc", "2"); AddObjectToList(R.drawable.ic_help, "Help", "Help desc", "2"); AddObjectToList(R.drawable.ic_download, "Download", "Download desc", "2"); AddObjectToList(R.drawable.ic_mail, "Mail", "Mail desc", "2"); AddObjectToList(R.drawable.ic_search, "Search", "Search desc", "2"); AddObjectToList(R.drawable.ic_settings, "Settings", "Settings desc", "2"); } // Add one item into the Array List public void AddObjectToList(int image, String title, String desc, String duration) { bean = new ItemBean(); bean.setduration(duration); bean.setDescription(desc); bean.setImage(image); bean.setTitle(title); itemList.add(bean); } } 

Itembean

 public class ItemBean { String title; String description; int image; String duration; public String getTitle() { return title; } public String getDuration() { return duration; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public int getImage() { return image; } public void setImage(int image) { this.image = image; } public void setduration(String duration) { this.duration = duration; } } 

ListViewCustomAdapter

 public class ListViewCustomAdapter extends BaseAdapter{ ArrayList<Object> itemList; public Activity context; public LayoutInflater inflater; public ListViewCustomAdapter(Activity context,ArrayList<Object> itemList) { super(); this.context = context; this.itemList = itemList; this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public int getCount() { // TODO Auto-generated method stub return itemList.size(); } public Object getItem(int position) { // TODO Auto-generated method stub return itemList.get(position); } public long getItemId(int position) { // TODO Auto-generated method stub return 0; } public static class ViewHolder { ImageView imgViewLogo; TextView txtViewTitle; TextView txtViewDescription; TextView duration; } public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder holder; if(convertView==null) { holder = new ViewHolder(); convertView = inflater.inflate(R.layout.items, null); holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo); holder.txtViewTitle = (TextView) convertView.findViewById(R.id.txtViewTitle); holder.txtViewDescription = (TextView) convertView.findViewById(R.id.txtViewDescription); holder.duration = (TextView) convertView.findViewById(R.id.duration); convertView.setTag(holder); } else holder=(ViewHolder)convertView.getTag(); ItemBean bean = (ItemBean) itemList.get(position); holder.imgViewLogo.setImageResource(bean.getImage()); holder.txtViewTitle.setText(bean.getTitle()); holder.txtViewDescription.setText(bean.getDescription()); holder.duration.setText(bean.getDuration()); return convertView; } } 

XML layout: * Product *

 <RelativeLayout android:id="@+id/relativeLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/list_selector" xmlns:android="http://schemas.android.com/apk/res/android" android:padding="5dip"> <ImageView android:layout_width="50dip" android:layout_height="50dip" android:padding="3dip" android:id="@+id/imgViewLogo" android:src="@drawable/icon" android:layout_alignParentLeft="true" android:layout_centerInParent="true" android:background="@drawable/image_bg" android:layout_marginRight="5dip" android:scaleType="center" > </ImageView> <TextView android:textAppearance="?android:attr/textAppearanceLarge" android:layout_height="wrap_content" android:layout_alignTop="@+id/imgViewLogo" android:text="TextView" android:layout_width="wrap_content" android:id="@+id/txtViewTitle" android:layout_toRightOf="@+id/imgViewLogo" android:textColor="#040404" android:typeface="sans" android:textSize="20dip" android:textStyle="bold" android:layout_marginRight="15dp" > </TextView> <TextView android:layout_height="wrap_content" android:text="TextView" android:layout_width="wrap_content" android:id="@+id/txtViewDescription" android:textColor="#343434" android:textSize="15dip" android:layout_marginTop="1dip" android:layout_toRightOf="@+id/imgViewLogo" android:layout_below="@+id/txtViewTitle" android:layout_marginLeft="2dip" android:layout_marginRight="15dp" > </TextView> <TextView android:id="@+id/duration" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignTop="@+id/txtViewTitle" android:gravity="right" android:layout_marginRight="5dip" android:textSize="15dip" android:textColor="#10bcc9" android:textStyle="bold"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/arrow" android:layout_alignParentRight="true" android:layout_centerVertical="true" /> </RelativeLayout> 

Layout: * Basic *

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/listView1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:divider="#b5b5b5" android:dividerHeight="1dp" android:listSelector="@drawable/list_selector" /> </LinearLayout> 

Each tip will be helpful, thanks.

+6
source share
5 answers

Do not use this for loop to set the background color after the fact. Do this in your adapter’s getView method. Try the following:

 public View getView(int position, View convertView, ViewGroup parent) { /* remainder is unchanged */ convertView.setBackgroundColor(position % 2 == 0 ? Color.WHITE : Color.GREY); return convertView; } 
+10
source

This is another way to change the background using the switch. Using this method, you will save the guidance and focus colors of the selector.

 public View getView(int position, View convertView, ViewGroup parent) { /* remainder is unchanged */ convertView.setBackgroundResource(position % 2 == 0 ? R.drawable.list_selector_first : R.drawable.list_selector_second); return convertView; } 
+3
source

You can do this easily by setting the background inside the getView function of your user adapter.

Try this code:

  if(position % 2 == 0) convertView.setBackgroundColor(Color.GREY); else convertView.setBackgroundColor(Color.WHITE); 
0
source

You can return different views from getView based on the position passed in the position.

0
source

I believe that you can do this based on position

  if (position == 0) { view.SetBackgroundColor(Android.Graphics.Color.gray); } else if (position == 1) { view.SetBackgroundColor(Android.Graphics.Color.white); } 

etc., depending on how many positions you have.

-1
source

Source: https://habr.com/ru/post/914068/


All Articles