2012-07-05 67 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