2015-08-21 1 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); 

     } 

Do:

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

И УДАЛИТЬ СОРТИРОВОЧНЫЙ ЗВОНОК по вашему методу сравнения.

+0

i tyr это, но не работает для меня): – user5253549

+0

добавлено решение sd –

+0

...уверен, что вы быстро обновляете ответы ;-) –

1

... ваш код делает некоторые неприятные вещи, вы собираетесь сортировать внутри каждого цикла сортировки? Пожалуйста, удалите 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()); 
} 

..и попробовать еще раз, вы можете позвонить сортировать Collections.sort линию в другом месте.

+0

Я удаляю его, но все же не работаю – user5253549

+0

. Теперь вам нужно что-то отсортировать, попробуйте вызвать 'Collections.sort' после того, как вы уже захватили все свои данные из JSON, посмотрите на обновленный ответ @Marcos Vasconcelos. –

+0

хорошо спасибо – user5253549