2010-07-15 11 views
1

내 ListAdapter와 함께 listActivity를 만들었습니다. 문제는 목록이 한 번 실행 된 순서대로 표시된다는 것입니다. 그러나 아래로 스크롤하거나 다른 활동에서 돌아 가면 listView가 완전히 고장난 것입니다.안드로이드 정렬되지 않은 목록

나는 ArrayList에 문제가 있다고 생각했지만 목록이 정렬되어 있고 ArrayList의 모든 요소를 ​​반복 할 때 해당 요소를 삽입 한 것과 같은 방식으로 로그에 인쇄되기 때문에 확신 할 수 있습니다.

누군가 아래에 어댑터 코드를 붙여 넣었습니다.

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; 
    } 
} 

답변

2

당신은 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

감사 후 많은 사람, 당신의 생명의 은인을 코드를 이동해야합니다. –

+0

위대한, 그것은 정확하게 우리 문제이었다! 감사 –

관련 문제