2010-07-15 4 views
1

J'ai créé un listActivity avec mon propre ListAdapter. Le problème est que la liste est vue dans l'ordre une fois lancée. Mais lorsque je défile vers le bas, ou que je reviens d'une autre activité, le listView est complètement hors service. Je pensais que le problème était dans ArrayList mais non, la liste est triée et j'en suis sûr parce que lorsque je boucle sur tous les éléments dans ArrayList, ils sont imprimés dans le journal de la même manière que je les ai insérés.Android non triée Liste

J'ai collé le code de l'adaptateur ci-dessous au cas où quelqu'un voudrait le vérifier.

package com.anubis.mail; 

import java.util.ArrayList; 

import android.content.Context; 
import android.util.Log; 
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 EmailAdapter extends BaseAdapter { 

    private ArrayList<EmailModel> elements; 
    private Context c; 

    public EmailAdapter(Context c, ArrayList<EmailModel> Emails) { 

     this.elements = Emails; 
     this.c = c; 
    } 
    public int getCount() { 
     return elements.size(); 
    } 

    public Object getItem(int position) { 
     return elements.get(position); 
    } 

    public long getItemId(int id) { 
     return id; 
    } 

    public void Remove(int id) { 
     notifyDataSetChanged(); 
    } 

    public void Add(EmailModel email) { 

     this.elements.add(email); 

     for (EmailModel e : elements){ 

      Log.v("EmailAdapter", e.getSubject()); 
     } 

     notifyDataSetChanged(); 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 

     LinearLayout rowLayout; 
     EmailModel email = elements.get(position); 

     if (convertView == null) { 

      rowLayout = (LinearLayout) LayoutInflater.from(c).inflate (R.layout.inbox_item, parent, false); 

      TextView subject_textview = (TextView)rowLayout.findViewById(R.id.subject_textview); 
      subject_textview.setText(email.getSubject()); 

      String body_hint = " - " + email.getBodyHint(); 

      TextView bodyhint_textview = (TextView)rowLayout.findViewById(R.id.body_hint_textview); 
      bodyhint_textview.setText(body_hint); 


      String sender_name = get_sender_name(email.getSender()); 

      TextView sender_name_textview = (TextView)rowLayout.findViewById(R.id.sender_textview); 
      sender_name_textview.setText(sender_name); 

      TextView date_time_textview = (TextView)rowLayout.findViewById(R.id.date_time_textview); 
      date_time_textview.setText(email.getTime()); 

     } else { 
      rowLayout = (LinearLayout) convertView; 
     } 
     return rowLayout; 
    } 

    private String get_sender_name(String from) { 

     String[] sender = from.split("<"); 
     String sender_name; 

     try { 
      sender_name = sender[0]; 
     } catch (Exception e) { 
      sender_name = sender[1]; 
     } 
     return sender_name; 
    } 
} 

Répondre

2

Vous devez déplacer code après les IF

if (convertView == null) { 
     rowLayout = (LinearLayout) LayoutInflater.from(c).inflate (R.layout.inbox_item, parent, false); 
} else { 
     rowLayout = (LinearLayout) convertView; 
} 
TextView subject_textview = (TextView)rowLayout.findViewById(R.id.subject_textview); 
subject_textview.setText(email.getSubject()); 

String body_hint = " - " + email.getBodyHint(); 

TextView bodyhint_textview = (TextView)rowLayout.findViewById(R.id.body_hint_textview); 
bodyhint_textview.setText(body_hint); 


String sender_name = get_sender_name(email.getSender()); 

TextView sender_name_textview = (TextView)rowLayout.findViewById(R.id.sender_textview); 
sender_name_textview.setText(sender_name); 

TextView date_time_textview = (TextView)rowLayout.findViewById(R.id.date_time_textview); 
date_time_textview.setText(email.getTime()); 
return rowLayout; 
+0

Merci beaucoup un homme, votre économiseur de vie. –

+0

Super, c'était exactement notre problème! Merci –

Questions connexes