Сортировать RecyclerView по дате - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь отсортировать RecyclerView по дате, но я перепробовал слишком много вещей и не знаю, что попробовать сейчас.Проблема в строке adaptor.notifyDataSetChanged (); , потому что, если я не помещаю, не показывает ошибку, но не обновляет окно повторной проверки тоже

Это то, что яи показывает мне эту ошибку.

Невозможно запустить действие.support.v7.widget.RecyclerView $ Adapter.notifyDataSetChanged () 'для пустой ссылки на объект'

Прежде всего, я поместил все траектории в метод GetAllTrajects () ивнутри Collections.sort я анализирую дату TextView.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pending_traject_recycler_view);

    listPendingTraject=new ArrayList<>();
    recyclerPendingTraject = (RecyclerView)findViewById(R.id.pendingTrajectRecyclerView);
    recyclerPendingTraject.setLayoutManager(new LinearLayoutManager(this));

      GetAllTrajects();

    Collections.sort(listPendingTraject, new Comparator<PendingTrajectPOJO>() {
        @Override
        public int compare(PendingTrajectPOJO pendingTrajectPOJO, PendingTrajectPOJO t1) {
            String Date = pendingTrajectPOJO.getDate();

            String Date1 = t1.getDate();

            Date date=null,date1=null;

            SimpleDateFormat formatDate = new SimpleDateFormat("dd/MMM/yyyy");
            try {
                date = formatDate.parse(Date);
                date1 = formatDate.parse(Date1);
            } catch (ParseException e) {
                e.printStackTrace();
            }


            return date.before(date1) ? 1 : 0;

        }
    });
    adapter.notifyDataSetChanged();
}

Внутри метода GetAllTrajects, когда я помещаю всю информацию, я вызываю метод showPendingTraject ()

  private void showPendingTraject() {
    listPendingTraject.add(new PendingTrajectPOJO(nameUsers,coordenatesOriginBundle,Origin,Destination,DataIHora,coordenatesDestiBundle,contadorCordenades));

    Log.d("ID",""+nomUser);
    adapter = new AdapterPendingTraject(listPendingTraject);
    recyclerPendingTraject.setAdapter(adapter);


}

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Простым решением этой проблемы было бы сохранение / ввод данных в вашу дату хранения PendingTrajectPOJO в миллисекундах, которая будет иметь тип long вместо String, а затем вы можете легко сравнить длинные значения и отсортировать их.

Предположим, ваша дата - 28/05/2018, затем вы можете получить ее в миллисекундах, используя следующий метод:

String givenDateString = "28/05/2018"; 
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try {
   Date mDate = sdf.parse(givenDateString);
   long timeInMilliseconds = mDate.getTime();
   //store this timeInMilliseconds in your POJO object
   System.out.println("Date in milli :: " + timeInMilliseconds);
} catch (ParseException e) {
        e.printStackTrace();
}

и используя сортировку timeInMilliseconds, просто не забудьте преобразовать timeInMilliseconds вдата при отображении в RecyclerView.

 Collections.sort(listPendingTraject, new Comparator<PendingTrajectPOJO>() {
    @Override
    public int compare(PendingTrajectPOJO pendingTrajectPOJO, PendingTrajectPOJO t1) {

        long Date = pendingTrajectPOJO.getDate();
        long Date1 = t1.getDate();

        return Date.compareTo(Date1);
    }
});
0 голосов
/ 28 мая 2018

Я думаю, что нижеупомянутая строка создает проблему.

String Date =pendingTrajectPOJO.getDate();

Переименуйте дату во что-то другое и посмотрите, работает ли она

...