Android-Droid
Android-Droid

Reputation: 14565

Android set color to a listview item

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

Answers (4)

Ujjwal Bansal
Ujjwal Bansal

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

Last Warrior
Last Warrior

Reputation: 1307

Use Custom List Adapter

Custom Android ListAdapter

OR

Android Lists: ListActivity and ListView CustomAdapter

May this help you...Enjoy

Upvotes: 1

praetorian droid
praetorian droid

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

Alexander
Alexander

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

Related Questions