Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 有序列表视图_Android_Listview - Fatal编程技术网

Android 有序列表视图

Android 有序列表视图,android,listview,Android,Listview,我已经为ListView创建了BaseAdapter。我想对列表中的元素进行排序,以便BaseAdapter的构造函数接收元素的有序数组。但我不知道为什么,元素的顺序不正确 public class NotificacionesAdapter extends BaseAdapter { private LayoutInflater inflater; private NotificacionInfo[] notificaciones = null; static class Vie

我已经为ListView创建了BaseAdapter。我想对列表中的元素进行排序,以便BaseAdapter的构造函数接收元素的有序数组。但我不知道为什么,元素的顺序不正确

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

提前感谢

我认为您的解决方案很复杂。让它变得容易。在构造函数中复制数组,然后使用java.util.Comparator对其排序;有条件的。你会在这个网站上找到许多比较器示例

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

为什么要先对对象进行排序,然后用未排序列表覆盖它们?

这是在尝试使用setNotifications方法时发生的还是从一开始就发生的?好的,我会试试。但是在构造函数中,我使用的不是java.util.Comparator,而是Arrays.sort方法。我已经照你说的做了,而且很有效。虽然我不理解为什么使用java.util.Comparator它不起作用,但实际上我也很惊讶,因为您的代码可能是正确的。根据@Tomislav提供的Ans,问题可能会发生。好啊您的问题已经解决了:根据我的经验,使用java.util.Comparator是一种更好的方法,&我总是使用这个方法。