2012-07-05 69 views
0

我爲「ListView」創建了一個「BaseAdapter」。我想排序列表中的元素,所以我的「BaseAdapter」的構造函數接收元素的有序數組。但我不知道爲什麼,元素沒有正確排列。ListView已訂購

public class NotificacionesAdapter extends BaseAdapter 
{ 
    private LayoutInflater inflater; 
    private NotificacionInfo[] notificaciones = null; 

    static class ViewHolder 
    { 
    TextView titulo; 
    TextView mensaje; 
    TextView fecha; 
    } 

    public static class NotificacionInfo implements Comparable<NotificacionInfo> 
    { 
    private String titulo; 
    private String mensaje; 
    private Date fecha; 

    public NotificacionInfo() 
    {  
    } 

    public String getTitulo() 
    { 
     return titulo; 
    } 

    public void setTitulo(String titulo) 
    { 
     this.titulo = titulo; 
    } 

    public String getMensaje() 
    { 
     return mensaje; 
    } 

    public void setMensaje(String mensaje) 
    { 
     this.mensaje = mensaje; 
    } 

    public Date getFecha() 
    { 
     return fecha; 
    } 

    public void setFecha(Date fecha) 
    { 
     this.fecha = fecha; 
    } 

    @Override 
    public int compareTo(NotificacionInfo another) 
    { 
     return another.getFecha().compareTo(this.fecha);    
    }   
    } 

    public NotificacionesAdapter(Context context, NotificacionInfo[] notificaciones) 
    { 
    this.inflater = LayoutInflater.from(context);  
    this.notificaciones = notificaciones; 

    Arrays.sort(this.notificaciones); 

    System.out.println(); 
    } 

    @Override 
    public int getCount() 
    { 
    return this.notificaciones.length; 
    } 

    @Override 
    public Object getItem(int arg0) 
    { 
    return notificaciones[arg0]; 
    } 

    @Override 
    public long getItemId(int position) 
    { 
    return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
    ViewHolder holder; 

    if (convertView == null) 
    { 
     convertView = inflater.inflate(R.layout.t_notificacion, null); 

     holder = new ViewHolder(); 
     holder.titulo = (TextView) convertView.findViewById(R.id.titulo); 
     holder.mensaje = (TextView) convertView.findViewById(R.id.mensaje); 
     holder.fecha = (TextView) convertView.findViewById(R.id.fecha); 

     convertView.setTag(holder); 
    } 
    else 
    {   
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.titulo.setText(notificaciones[position].getTitulo()); 
    holder.mensaje.setText(notificaciones[position].getMensaje()); 
    holder.fecha.setText(DateUtil.formatDate(notificaciones[position].getFecha(), "HH:mm dd-MM-yyyy")); 

    return convertView; 
    } 

    public void setNotificaciones (NotificacionInfo[] notificaciones) 
    { 
    Arrays.sort(this.notificaciones); 
    this.notificaciones = notificaciones; 
    } 

在此先感謝

+0

當您嘗試使用setNotifications()方法或從頭開始時,會發生這種情況嗎? – Amal 2012-07-05 14:07:11

回答

0

我認爲您的解決方案是複雜的。讓它變得容易。在構造函數中複製數組,然後使用帶有條件的java.util.Comparator;對其進行排序。你會在這個網站找到許多比較例子。

+0

好吧,我會試試看。但是在構造函數中,我使用的是Arrays.sort方法,而不是使用java.util.Comparator。 – Eduardo 2012-07-05 14:11:21

+0

好的,謝謝。我按照你告訴我的方式完成了工作。儘管我不明白爲什麼它不能使用java.util.Comparator。 – Eduardo 2012-07-05 14:26:25

+0

其實我也很驚訝,因爲你的代碼可能是正確的。根據答案可能會出現問題。由** @ Tomislav **提供。好的...你的問題解決了:)從我的經驗中使用java.util.Comparator是一個更好的方法,&我總是使用這個。 – 2012-07-05 14:32:02

0
Arrays.sort(this.notificaciones); 
this.notificaciones = notificaciones; 

爲什麼你先排序你的對象,並用未排序的列表覆蓋它們?

+0

是的,你是對的,這是一個錯誤。 – Eduardo 2012-07-05 14:26:51