2011-08-23 2 views
0

Je haved rempli la vue de la liste en utilisant setAdapter comme indiqué ci-dessousligne Coluring fondée sur la condition en vue Liste

cursor = manifest_helper.GetDeliveriesAgainstManifest(pkManifest); 





    cursor.moveToFirst(); 

    for (int i = 0; i < cursor.getCount(); i++) { 

     map = new HashMap<String, String>(); 
     map.put("Deliv_Address", 
       cursor.getString(cursor.getColumnIndex("Address"))); 
     map.put("Deliv_Time", 
       cursor.getString(cursor.getColumnIndex("Time"))); 
     map.put("Deliv_Order", 
       cursor.getString(cursor.getColumnIndex("DeliveryOrder"))); 
     map.put("Deliv_IsCustomerPickup", 
       cursor.getString(cursor.getColumnIndex("IsCustomerPickup"))); 
     map.put("Deliv_FKDeliveryStatus", 
       cursor.getString(cursor.getColumnIndex("FKDeliveryStatus"))); 
     map.put("Deliv_PKDelivery", 
       cursor.getString(cursor.getColumnIndex("PKDelivery"))); 
     alist.add(map); 
     cursor.moveToNext(); 


    } 
    sd = new SimpleAdapter(this, alist, R.layout.deliveries_list_row, 
      new String[] { "Deliv_Address", "Deliv_Time", 
        "Deliv_Order", "Deliv_IsCustomerPickup", 
        "Deliv_FKDeliveryStatus", "Deliv_PKDelivery" }, 
      new int[] { R.id.tv_Deliv_Address, R.id.tv_Deliv_Time, 
        R.id.tv_Deliv_Order, 
        R.id.tv_Deliv_IsCustomerPickup, 
        R.id.tv_Deliv_FKDeliveryStatus, 
        R.id.tv_Deliv_PKDelivery }); 
    //selectedAdapter = new SelectedAdapter(this, 0, alist); 
    //selectedAdapter.setNotifyOnChange(true); 

    ListDeliveries.setAdapter(sd); 

Le problème est que j'ai un champ « IsCustomerPickup » qui ont une valeur C ou O. Me vouloir différencier chaque rangée au moyen de couleur différente .... quelqu'un m'aidera ... pls ...

Répondre

0

Vous devrez étendre SimpleAdapter dans votre propre classe CustomAdapter qui est capable de lire la valeur isCustomerPickup et Définissez l'arrière-plan rowView en conséquence.

0

Je ne pense pas que cela fonctionnera avec un adaptateur Simpel. Je pense que vous devez écrire votre adaptateur personnalisé et faire votre propre mise en page listitem. En tant que racine d'un listitem, prenez une disposition linéaire. Créez votre propre adaptateur et remplacez la méthode getView().

Voici quelques extraits: créez une liste dans votre fichier de format. puis faire une custom_listview_row.xml avec:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/ll_root_listview_row" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <TextView 
     android:id="@+id/tv_listview_row" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="your row text" /> 
</LinearLayout> 

Écrivez votre activité avec le listview et définir votre propre adaptateur au listview. Votre adaptateur pourrait ressembler à ceci:

import android.app.Activity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.LinearLayout; 
import android.widget.TextView; 


public class MyListViewAdapter extends BaseAdapter { 

    private LayoutInflater mLayoutInflater = null; 
    private Activity mActivity; 

    public MyListViewAdapter(Activity activity){ 
     mActivity = activity; 
     mLayoutInflater = (LayoutInflater) mActivity.getSystemService(mActivity.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
     // TODO OVERRIDE METHOD WITH YOUR DATABASE 
     return 0; 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO OVERRIDE METHOD WITH YOUR DATABASE 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO OVERRIDE METHOD WITH YOUR DATABASE 
     return 0; 
    } 

    public static class ViewHolder{ 
     public TextView rowTextView; 
     public LinearLayout rowLinearLayout; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi = convertView; 
     ViewHolder holder; 
     //If the view was never instantiated 
     if(convertView == null){ 
      vi = mLayoutInflater.inflate(R.layout.custom_listview_row.xml, null); 
      holder.rowTextView = (TextView) vi.findViewById(R.id.tv_listview_row); 
      holder.rowLinearLayout = (LinearLayout) vi.findViewById(R.id.ll_root_listview_row); 
      vi.setTag(holder); 
     } 
     else { 
      holder=(ViewHolder) vi.getTag(); 
     } 

     /* 
     * Here is your code to check which color the row should have 
     * you can call it like 
     * if(/*row at position should be blue*) { 
     * 
     *  holder.rowLinearLayout.setBackgroundColor(R.color.blue); 
     * } 
     * 
     */ 


     return vi; 
    } 

} 

Je n'ai pas Testet cet adaptateur, mais je pense que vous pouvez travailler avec et de l'adapter à vos besoins.

Espérons que cela aide.

Questions connexes