2016-03-22 5 views
1

In meiner App habe ich eine Listenansicht. In jeder Zeile des Listenelements gibt es eine Textansicht, die den Anfangsbuchstaben des Namens wie in vielen Kontakt-Apps anzeigt. Ich muss die Hintergrundfarbe dieser Textansicht aus einem vordefinierten Satz von 4 Farben festlegen, die in colors.xml definiert sind. Was ich will ist, dass die Farbe nach jeweils 4 Elementen in der Listenansicht wiederholt werden soll. Dafür habe ich die folgende LogikEinstellen der Farbe im Listenelement von 4 Farben

color_array=activity.getResources().getIntArray(R.array.dar_list_color); 

    if (count<4) { 
    viewHolder.layout_color.setBackgroundColor(color_array[count]); 

    } 

    else 
    count=0; 


    count++; 

Das Ding funktioniert gut, aber es gibt ein Problem, häufiges Problem mit Listview das heißt auf Farbänderungen zu scrollen. Da die Zählung nicht von der Position des Adapters abhängt, kann ich nicht herausfinden, wie ich diesen beheben kann. Hier

ist der Screenshot von dem, was ich umgesetzt haben Current Result

Dies ist die komplette Adapter Code

public class DAR_Aadapter extends BaseAdapter { 
int color_array[],count=0; 
Activity activity; 
ArrayList<DAR_List_Item> dar_List_Items; 

public DAR_Aadapter(Activity activity, ArrayList<DAR_List_Item> dar_List_Items) { 
    // TODO Auto-generated constructor stub 

    this.activity=activity; 
    this.dar_List_Items=dar_List_Items; 
    color_array=activity.getResources().getIntArray(R.array.dar_list_color); 

} 


@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return dar_List_Items.size(); 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return dar_List_Items.get(position); 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    ViewHolder viewHolder; 
    if(convertView==null) 
    { 
    viewHolder = new ViewHolder(); 
    convertView = LayoutInflater.from(activity).inflate(R.layout.dar_swipe_list_layout, null); 

    viewHolder.clientname= (TextView)convertView.findViewById(R.id.Client_name); 
    viewHolder.client_initial= (TextView) convertView.findViewById(R.id.client_initial); 
    viewHolder.text_contactedpaerson= (TextView)convertView.findViewById(R.id.text_contacted); 
    viewHolder.text_contacttype= (TextView)convertView.findViewById(R.id.text_contact_type); 
    viewHolder.text_createddate= (TextView)convertView.findViewById(R.id.text_Created_date); 
    viewHolder.text_requestdate= (TextView)convertView.findViewById(R.id.text_request_date); 
    viewHolder.text_productname= (TextView)convertView.findViewById(R.id.text_product); 
// viewHolder.text_status= (TextView)convertView.findViewById(R.id.text_status); 


    viewHolder.contactedpaerson= (TextView)convertView.findViewById(R.id.contacted); 
    viewHolder.contacttype= (TextView)convertView.findViewById(R.id.contact_type); 
    viewHolder.createddate= (TextView)convertView.findViewById(R.id.create_date); 
    viewHolder.requestdate= (TextView)convertView.findViewById(R.id.request_date); 
    viewHolder.productname= (TextView)convertView.findViewById(R.id.product); 
// viewHolder.status= (TextView)convertView.findViewById(R.id.status); 
    viewHolder.layout_color= (LinearLayout) convertView.findViewById(R.id.client_initial_layout); 

    convertView.setTag(viewHolder); 

    }else 
    { 
    viewHolder = (ViewHolder)convertView.getTag(); 
    } 
    viewHolder.clientname.setText(dar_List_Items.get(position).getClient_name()); 
     String temp=viewHolder.clientname.getText().toString(); 
     viewHolder.client_initial.setText(""+temp.charAt(0)); 
    viewHolder.contactedpaerson.setText(dar_List_Items.get(position).getContacted_person()); 
    viewHolder.contacttype.setText(dar_List_Items.get(position).getContact_type()); 
    viewHolder.createddate.setText(dar_List_Items.get(position).getCreated_date()); 
    viewHolder.productname.setText(dar_List_Items.get(position).getproduct_name()); 
    viewHolder.requestdate.setText(dar_List_Items.get(position).getRequest_date()); 
// viewHolder.status.setText(dar_List_Items.get(position).getStatus()); 

    if (count<4) { 
    viewHolder.layout_color.setBackgroundColor(color_array[count]); 

    } 

    else 
    count=0; 


    count++; 



    return convertView; 


} 




public static class ViewHolder 
{ 
    LinearLayout layout_color; 
    TextView clientname,client_initial,text_contactedpaerson,contactedpaerson,text_contacttype,contacttype,text_productname,productname,text_status,status,createddate,text_createddate,text_requestdate,requestdate; 
} 

} 

Antwort

2

Wie wäre es so etwas?

count = position % color_array.length(); 
switch(count) 
{ 
     case 0: 
     viewHolder.layout_color.setBackgroundColor(color_array[count]); 
     break; 

     case 1: 
     case 2: 
     case 3: 
     //handle these cases separately 
     //viewHolder.layout_color.setBackgroundColor(color_array[count]); 
     break; 

} 

es gibt Ihnen die Flexibilität der einzelnen Fälle getrennt zu behandeln. Wo initialisierten Sie count?

+0

initialisieren zählen in onCreate() –

+0

post diesen Code bitte seit dem 'count' wird wahrscheinlich nicht funktionieren und wird nicht auf die Position des Adapters beziehen. – Shark

+0

, aber die Position wird entsprechend dem Adapter erhöht und ist 0 beim Start. Wie wird das funktionieren? –