简体   繁体   中英

Android - Change background color of specific item of ListView

I'm making a game which will use a Listview to display some text as a chat.

Some of these texts represents events , so I want to change their background color according to that specific event: EX. Somebody gets killed, that specific Listview 's item will have a red background color

How do I achieve this?

This is my JAVA code:

            //STARTING SETUP
        ArrayList<String> arrayListMother;
        ArrayAdapter<String> arrayAdapterMother;
        ListView listViewMother;

        int counter;
        boolean introDone = false;

        String[] night = {"Welcome!","This is Lupus In Tabula!","You're gonna experience the Hasbro Game in a total new way, have fun!"};
        String[] day = {"Thank you!","Great","Let's do it!"};
        String[] dead = {"Thank you!","Great","Let's do it!"};
        String[] saved = {"Thank you!","Great","Let's do it!"};

        Button buttonGo;
        //ENDING SETUP


        //CREATE - CREATE//
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_game);
            setup();

        }
        //CREATE - CREATE//


    public void setup(){

    arrayListMother = new ArrayList<String>();
    arrayAdapterMother = new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, arrayListMother);
    listViewMother = (ListView) findViewById(R.id.list_mother);
    listViewMother.setAdapter(arrayAdapterMother);
    buttonGo = (Button)findViewById(R.id.buttonGo);
}   

And this is my XML code:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<ListView
    android:id="@+id/list_mother"
    android:text="@string/go"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:textAppearance="?attr/textAppearanceListItem"
    android:divider="@null"
    android:layout_weight="7"/>

<Button
    android:id="@+id/buttonGo"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:text="@string/go"
    android:textColor="@color/white"
    android:background="@color/colorPrimary"
    android:enabled="true"
    android:onClick="play" />
</LinearLayout>

use this code:

listViewMother.getChildAt(position).setBackgroundColor(
            Color.parseColor("#00743D"));

Override getView for ArrayAdapter . Based on the condition change color or do what is required. You have already provided params to ArrayAdapter constructor. So there is no need to inflate the view again. Get the same and do what is required. Similarly getItem(position) get's the data at a specidifed position.

http://developer.android.com/reference/android/widget/ArrayAdapter.html#getItem(int)

listViewMother.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayListMother) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = super.getView(position, convertView, parent);

    if(getItem(position).equals("Somebody gets killed"))
    {
       // do something change color
       row.setBackgroundColor (Color.RED); // some color  
    }
    else
    {
       // default state
       row.setBackgroundColor (Color.WHITE); // default coloe
    }
    return row;
  }
});

In your adapter class where you are binding the view, you can check for the particular condition and set the color in following way.This way you can set the color of the text or background dynamically. Hope this helps. I am using recycler viewer here which over rides onBindViewHolder. Your adapter should have the method which binds view.

@Override
 public void onBindViewHolder(ViewHolder holder, int position) {
     Person person = personList.get(position);

     holder.username.setText(person.getName());
     holder.arriveTime.setText(DateFormat.format("hh:mm a",(person.getArriveTime() * 1000)));


     if(person.getName().equals("NoVisitor"))
     {
         holder.username.setTextColor(Color.GRAY);
         holder.arriveTime.setTextColor(Color.GRAY);
         holder.leaveTime.setTextColor(Color.GRAY);
     }
     else
     {
         holder.username.setTextColor(Color.BLACK);
         holder.arriveTime.setTextColor(Color.BLACK);
         holder.leaveTime.setTextColor(Color.BLACK);
     }
 }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM