2015-08-21 40 views
2

我不知道如何按日期順序相反排序適配器的ArrayList通過反向日期

我覺得我的代碼是正確的排序我的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(); 
     } 
    } 
} 

回答

2

你要撥打:

Collections.sort(yourListOfComparablesObjects); 

訂貨清單上生效。

訂單不是自動的,您必須在您想要分類清單時撥打訂單。

你的代碼調用排序在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(); 

並在您的比較方法中刪除排序調用。

+0

我tyr但不適合我): – user5253549

+0

添加解決方案sd –

+0

...確定你正在快速升級答案;-) –

1

..你的代碼正在做一些討厭的事情,你打算在每個排序循環內進行排序嗎? 請繼續並從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()); 
} 

..和再試一次,你可能需要調用在另一個地方排序Collections.sort線。

+0

我刪除它,但還沒有工作 – user5253549

+0

..現在你必須在某個地方排序,在你已經從JSON獲取所有數據後,嘗試調用'Collections.sort',看看@Marcos Vasconcelos更新後的答案。 –

+0

好的謝謝 – user5253549