Reputation: 14565
I'm using a list view in my application which I'm populating from database. The things that I want to do is depending on some calculations to set the single list view item's text color to red for example. Is there any way to do that?
Here is how I'm populating the listview :
Cursor cursor = dbHelper.executeSQLQuery(sql);
if(cursor.getCount()==0){
Log.i("Cursor Null","CURSOR IS NULL");
nocards.setVisibility(View.VISIBLE);
} else if(cursor.getCount()>0){
nocards.setVisibility(View.GONE);
for(cursor.move(0); cursor.moveToNext(); cursor.isAfterLast()) {
text = cursor.getString(cursor.getColumnIndex("Title"));
Log.i("Show Title","Show Title : "+text);
collId = Integer.parseInt(cursor.getString(cursor.getColumnIndex("CollID")));
Log.i("CollId","Collection ID : "+collId);
if (isLoggedIn) {
for(int k=0; k<ObjectID.size(); k++){
if (ObjectID.get(k) == collId){
cardsCount = OwnedCardsCount.get(k);
}
}
} else {
cardsCount = cursor.getString(cursor.getColumnIndex("TotalCards"));
}
String sqlite2 = "SELECT media_id FROM collection_media WHERE collection_id="+collId+" AND media_type_id="+fronImage;
Cursor bg = dbHelper.executeSQLQuery(sqlite2);
if (bg.getCount() == 0) {
bg.close();
} else if (bg.getCount() > 0) {
for (bg.move(0); bg.moveToNext(); bg.isAfterLast()) {
int mediId = Integer.parseInt(bg.getString(bg.getColumnIndex("media_id")));
Log.i("","mediId : " + mediId);
//if(storageID==1){
path = rpc.getPublicPathsInternal(servername, fronImage, mediId, Recommended.this);
/*} else if(storageID==2){
path = rpc.getPublicPathsExternal(servername, fronImage, mediId);
}*/
Log.v("","path: "+path);
}
}
array.add(collId);
hm = new HashMap<String, Object>();
hm.put(IMAGE, path);
hm.put(TITLE, text);
hm.put(CARDS_COUNT, cardsCount +" Stampii");
items.add(hm);
}
}
final SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.main_listview,
new String[]{TITLE, CARDS_COUNT, IMAGE}, new int[]{ R.id.main_name, R.id.main_info, R.id.main_img});
lv1.setAdapter(adapter);
lv1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position, long id)
{
Intent previewMessage = new Intent(Recommended.this, MyCollectionId.class);
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
previewMessage.putExtra("collection_id", array.get(position));
previewMessage.putExtra("opentype", 1);
parentActivity.startChildActivity("MyCollectionId", previewMessage);
}
});
and my main_listview.xml's code :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:orientation="horizontal"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="fill_parent"
android:orientation="vertical"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/main_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_margin="4dp"/>
<TextView
android:id="@+id/main_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="14dp"
android:textColor="#000000"
android:textStyle="bold"
android:layout_toRightOf="@+id/main_img"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"/>
<TextView
android:id="@+id/main_info"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/main_name"
android:layout_toRightOf="@+id/main_img"
android:textSize="12dp"
android:textColor="#666666"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"/>
<ImageView
android:id="@+id/arrow"
android:src="@drawable/ic_arrow_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:layout_centerVertical="true" />
</RelativeLayout>
</LinearLayout>
So I want to set the textColor of main_name to red. Any suggestions?
Upvotes: 1
Views: 5153
Reputation: 123
You can make a class which extends the BaseAdapter
class. The BaseAdapter
class provides you some override method; the getView()
is one of them — in this method you can customize your views as you want.
Below is the sample project from this; you can get the idea:
https://ujjwal.opendrive.com/files?51477570_t4x6y
Upvotes: 0
Reputation: 1307
Use Custom List Adapter
OR
Android Lists: ListActivity and ListView CustomAdapter
May this help you...Enjoy
Upvotes: 1
Reputation: 3029
You need class like this:
public class StillSimpleAdapter extends SimpleAdapter {
public StillSimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if (timeForRed(position)) ((TextView) view.findViewById(R.id.main_name)).setTextColor(0xffff0000);
return view;
}
}
Use it instead of SimpleAdapter in your code and implement timeForRed() method somewhere and will be happy.
Upvotes: 2
Reputation: 48232
Create an XML for a single list item. Then create your own adapter which overrides getView()
function. In this function inflate the list item layout, populate controls from the data and set your textview color as you wish.
Upvotes: 1