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.