按倒序日期对适配器数组列表排序



我不知道如何按日期倒序排序

我认为我的代码是好的,但我的列表不显示我的数组颠倒排序。我尝试了各种方法,看到了很多问题,但我没有设法达到我的目标。

下面是我的代码:

在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();
        }
    }
}

你必须调用:

Collections.sort(yourListOfComparablesObjects);

to order对list生效。

排序不是自动的,当你想要排序列表时,你必须调用order。

你的代码在G.images上调用sort,这是错误的,因为如果不在列表上排序,这个方法将永远不会被调用。

要在倒序和正序之间转换,必须从以下顺序进行更改:

   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();

并删除你的比较方法中的SORT调用。

…你的代码做了一些令人讨厌的事情,你打算在每个排序循环中进行排序吗?请将Collections.sort(G.images, Collections.reverseOrder());从您的compareTo功能中移除。

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

. .然后再试一次,你可能想在另一个地方调用sort Collections.sort line