Mam jedną niestandardową listę array, która zawiera wiele parametrów wraz z czasem.

Chcę sortować tę listę zgodnie z parametrem czasu w formacie rosnącym i malejącym

Szukałem dużo Oto kilka linków Sortuj obiekty w arraylist według Daty?

Sortuj arraylista z czasami w Javie

I wiele więcej, ale nie działa

Oto mój kod

Wywołanie funkcji na kliknięcie

 private void callTimeSorting(ArrayList<ObjectClass>solutions){
    try{
        ArrayList<ObjectClass> tempList = new ArrayList<>();
        if (tempList.size() > 0){tempList.clear();}
        tempList.addAll(solutions);
        if (mTimeTag == 1) {
            if (!mAsendingTime) {
                Collections.sort(tempList, AsendingTimeComparator);
                mAsendingTime = true;
                mAdapter.notify();
            } else {
                Collections.sort(tempList, DesendingTimeComparator);
                mAsendingTime = false;
            }

        }
 }

Metoda OnClick

 @Override
public void onClick(View view) {
    int id = view.getId();
    switch (id) {
       case R.id.tvTimings :
            mTimeTag =  1 ;
            callTimeSorting(mSolutions) ;
            mAdapter.notifyDataSetChanged();
            break;


 }}

asendcomparator

  private static Comparator<ObjectClass> AsendingTimeComparator = new Comparator<ObjectClass>() {
    @Override
    public int compare(ObjectClass solution1, ObjectClass solution2) {
        String time1 = solution1.getDepartureDateTime();
        String time2 = solution2.getDepartureDateTime();
        return time1.compareTo(time2);//asending
    }
};

private static Comparator<ObjectClass> DesendingTimeComparator = new Comparator<ObjectClass>() {
    @Override
    public int compare(ObjectClass solution1, ObjectClass solution2) {
        String time1 = solution1.getDepartureDateTime();
        String time2 = solution2.getDepartureDateTime();
        return time2.compareTo(time1);//descending

    }



};

Nie wiem, dlaczego moja posortowana lista nie przywiązuje się do recykleraview?

-2
Pranita 19 luty 2018, 14:12

3 odpowiedzi

Najlepsza odpowiedź

Użyj oryginalnej listy używanych w adapterze, a nie temp

 private void callTimeSorting(ArrayList<ObjectClass>solutions){
        try{
            ArrayList<ObjectClass> tempList = new ArrayList<>();
            tempList.addAll(solutions);
            solutions.clear();
            if (mTimeTag == 1) {
                if (!mAsendingTime) {
                    Collections.sort(tempList, AsendingTimeComparator);
                    mAsendingTime = true;
                } else {
                    Collections.sort(tempList, DesendingTimeComparator);
                    mAsendingTime = false;
                }
              solutions.addAll(tempList);
              mAdapter.notifyDataSetChanged();
            }
     }
3
rajan ks 19 luty 2018, 11:16

Twoja lista nie jest sortowana, ponieważ sortujesz templist:

Collections.sort(tempList, AsendingTimeComparator);

A nie aktualna lista Twój adapter używa rozwiązań I.E.

Nie należy używać templistów i bezpośrednio sortować rozwiązań.

private void callTimeSorting(ArrayList<ObjectClass>solutions){
    try{
        if (mTimeTag == 1) {
            if (!mAsendingTime) {
                Collections.sort(solutions, AsendingTimeComparator);
                mAsendingTime = true;
                mAdapter.notify();
            } else {
                Collections.sort(solutions, DesendingTimeComparator);
                mAsendingTime = false;
            }

        }
 }
2
Nargis 19 luty 2018, 11:19

Użyj odniesienia mList ... przez kod nie zainicjuj go ponownie .. Użyj clear() zamiast new Arraylist<> i nie przypisz żadnych innych odniesienia do listy jak { {X2}}

Madapter straciłby odniesienie do listy ... i nie działa odpowiednio.

1
Santanu Sur 19 luty 2018, 11:19