【问题标题】:Sort adapter ArrayList by reverse date按反向日期对适配器 ArrayList 进行排序
【发布时间】:2015-11-15 21:55:27
【问题描述】:

我不知道如何按日期倒序排列我的 ArrayList 适配器

我认为我的代码没问题,但我的列表没有反向显示我的数组 种类。我尝试了各种方法,看到了很多问题,但我没有达到我的目标。

这是我的代码:

G 类:

public static ArrayList<StructureImage> images = new ArrayList<StructureImage>();

和:

public class StructureImage implements Comparable<StructureImage> {

 public String title;
 public String tozihat;
 public String thumbnail;
 public String url;

 Date dateTime;

 public void setDateTime(Date datetime) {
    this.dateTime = datetime;
 }

 public Date getDateTime() {
    return dateTime;
 }

 @Override
 public int compareTo(StructureImage o) {
    Collections.sort(G.images, Collections.reverseOrder());
    if (getDateTime() == null || o.getDateTime() == null)
        return 0;
    return getDateTime().compareTo(o.getDateTime());
 }
}

和填充方法:

public void fill(final ArrayAdapter<StructureImage> adapter, final StructureImage item, final int position) {

 txtTitle.setText(item.title);
 txtTozih.setText(item.tozihat);
 imgPreview.setClickable(true);

 String filename = item.thumbnail.replace("/thumbnail/", "");
 intent.putExtra("filename", filename);
 final File imageFile = new File(G.DIR_FINAL + "/" + filename);
 if ( !imageFile.exists()) {
     imgPreview.setImageBitmap(null);
     DownloadManager.addToDownloadList(item.thumbnail);
 }

 BitmapFactory.Options options = new BitmapFactory.Options();
//options.inSampleSize = 8;
 Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options);
 imgPreview.setImageBitmap(bitmap);
}

我使用图像数组:

    private void getImageListFromServer() {
    Date date = new Date(0);
    String result = Webservice.readUrl("http://192.168.1.100/file-server/service.php", null);
    if (result != null) {
        try {
            images.clear();

            JSONArray tasks = new JSONArray(result);
            for (int i = 0; i < tasks.length(); i++) {
                JSONObject object = tasks.getJSONObject(i);
                StructureImage image = new StructureImage();
                image.title = object.getString("title");
                image.tozihat = object.getString("tozihat");
                image.thumbnail = object.getString("thumbnail");
                image.url = object.getString("url");

                DownloadManager.addToDownloadList(image.thumbnail);
                images.add(image);

            }

            adapter.notifyDataSetChanged();
        }
        catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

【问题讨论】:

    标签: java arrays sorting reverse adaptor


    【解决方案1】:

    你必须打电话:

    Collections.sort(yourListOfComparablesObjects);
    

    要排序在列表上生效。

    顺序不是自动的,您必须在想要排序列表时调用 order。

    您的代码在 G.images 上调用排序,这是错误的,因为如果不是列表中的排序,则永远不会调用此方法。

    要在反向和正常顺序之间切换,您必须从:

       return getDateTime().compareTo(o.getDateTime());
    

    到:

       return o.getDateTime().compareTo(getDateTime());
    

    到你的代码:

    在之后添加:

            JSONArray tasks = new JSONArray(result);
            for (int i = 0; i < tasks.length(); i++) {
                JSONObject object = tasks.getJSONObject(i);
                StructureImage image = new StructureImage();
                image.title = object.getString("title");
                image.tozihat = object.getString("tozihat");
                image.thumbnail = object.getString("thumbnail");
                image.url = object.getString("url");
    
                DownloadManager.addToDownloadList(image.thumbnail);
                images.add(image);
    
            }
    

    做:

               Collections.sort(images);
               adapter.notifyDataSetChanged();
    

    并在您的比较方法中删除排序调用。

    【讨论】:

    • ...确保您正在快速升级答案 ;-)
    • 是的,它的代码帮助我非常感谢:Collections.sort(images); Collections.reverse(图像); adapter.notifyDataSetChanged();
    【解决方案2】:

    ..您的代码正在做一些令人讨厌的事情,您是否打算在每个排序循环中进行排序? 请继续从您的compareTo 函数中删除Collections.sort(G.images, Collections.reverseOrder());

    @Override
     public int compareTo(StructureImage o) {
        if (getDateTime() == null || o == null || o.getDateTime() == null)
            return 0;
        return getDateTime().compareTo(o.getDateTime());
     }
    

    ..再试一次,你可能想在另一个地方调用 sort Collections.sort 行。

    【讨论】:

    • ..现在您必须在某个地方进行排序,在您已经从 JSON 中获取所有数据后尝试调用Collections.sort,查看@Marcos Vasconcelos 更新的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 2015-03-25
    相关资源
    最近更新 更多