как отсортировать элементы просмотра ресайклера в android в порядке убывания - PullRequest
0 голосов
/ 05 мая 2020

Моя главная страница: я хочу отсортировать представление ресайклера при нажатии на кнопку сортировки

Ожидается, что это произойдет (при нажатии кнопки сортировки: case1: если ресайклер не отсортирован ...... . тогда он должен быть отсортирован в порядке сборки case2: если ресайклер не отсортирован в порядке сборки ....... тогда он должен быть отсортирован в порядке убывания case1: если ресайклер не отсортирован в порядке убывания ...... . затем он должен быть отсортирован в порядке сборки)

package edmt.dev.androidgridlayout;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

import edmt.dev.androidgridlayout.HelperClasses.HomeAdapter.CategoryAdapter;
import edmt.dev.androidgridlayout.HelperClasses.HomeAdapter.FeaturedAdapter;
import edmt.dev.androidgridlayout.HelperClasses.HomeAdapter.FeaturedHelperClass;
import edmt.dev.androidgridlayout.HelperClasses.HomeAdapter.ProductAdapter;

public class AllProductPage extends AppCompatActivity {

    RecyclerView productrecycler;
    ProductAdapter productAdapter;
    LinearLayout sortbtn,filterbtn;
    private String[] mArrayNames=new String[]{"Pizza","Burger","Wraps","Sandwich","Chicken combos","Veg combos","Majitos","Breveges"};
    ArrayList<FeaturedHelperClass> products;

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

        productrecycler = findViewById(R.id.product_recycler);
        sortbtn = findViewById(R.id.sort_btn);
        filterbtn = findViewById(R.id.filter_btn);
        productrecycler();
        sortbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sortArray();
//                sortArrayList();
            }
        });
    }

    private void sortArray() {
        Collections.sort(products);
        productAdapter.notifyDataSetChanged();
    }


    private void sortArrayList() {
        Collections.sort(products, new Comparator<FeaturedHelperClass>() {
            @Override
            public int compare(FeaturedHelperClass o1, FeaturedHelperClass o2) {
                return o1.getTitle().compareTo(o2.getTitle());
            }
        });
        productAdapter.notifyDataSetChanged();
    }


    private void productrecycler() {
        productrecycler.setHasFixedSize(true);
        productrecycler.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
        products = new ArrayList<>();
        products.add(new FeaturedHelperClass(R.drawable.yarnbg2, "Pizza", "sdffsb",400));
        products.add(new FeaturedHelperClass(R.drawable.yarnbg2, "Burger", "sdffsb",600));
        products.add(new FeaturedHelperClass(R.drawable.yarnbg2, "Wraps", "sdffsbsfavs sdvv sbdfb ",550));
        products.add(new FeaturedHelperClass(R.drawable.yarnbg2, "Sandwich", "sdffsbsfavs sdvv sbdfb ",300));
        products.add(new FeaturedHelperClass(R.drawable.yarnbg2, "Chicken combos", "sdffsbsfavs sdvv sbdfb ",900));
        products.add(new FeaturedHelperClass(R.drawable.yarnbg2, "Veg combos", "sdffsbsfavs sdvv sbdfb ",100));
        products.add(new FeaturedHelperClass(R.drawable.yarnbg2, "Majitos", "sdffsbsfavs sdvv sbdfb ",250));
        products.add(new FeaturedHelperClass(R.drawable.yarnbg2, "Breveges", "sdffsbsfavs sdvv sbdfb ",600));
        productAdapter = new ProductAdapter(products);
        productrecycler.setAdapter(productAdapter);
        productAdapter.setOnItemClickedListner(new ProductAdapter.onItemClickListner() {
            @Override
            public void onItemClicked(int position) {
                Toast.makeText(getApplicationContext(), "ProductAdapter" + position, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onHeartClicked(int position ,String state) {
                Toast.makeText(getApplicationContext(), "onHeartClicked" + position+"  "+state, Toast.LENGTH_LONG).show();
            }
        });

    }
}

Мой класс помощника: здесь я реализовал интерфейс Comparable и сравнил цену продукта, чтобы отсортировать их в порядке сборки.

Но Я не могу отсортировать цену в порядке убывания

Как мне этого добиться?

package edmt.dev.androidgridlayout.HelperClasses.HomeAdapter;

public class FeaturedHelperClass implements Comparable<FeaturedHelperClass>{
    int image;
    String title;
    String Description;
    int price;

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public FeaturedHelperClass(int image, String title, String description) {
        this.image = image;
        this.title = title;
        this.Description = description;
    }
    public FeaturedHelperClass(int image, String title, String description,int price) {
        this.image = image;
        this.title = title;
        this.Description = description;
        this.price = price;
    }

    public FeaturedHelperClass(int image, String title) {
        this.image = image;
        this.title = title;
    }

    public void setImage(int image) {
        this.image = image;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setDescription(String description) {
        Description = description;
    }

    public int getImage() {
        return image;
    }

    public String getTitle() {
        return title;
    }

    public String getDescription() {
        return Description;
    }


    @Override
    public int compareTo(FeaturedHelperClass o) {
        return this.price -o.getPrice();
    }
}

Ответы [ 3 ]

1 голос
/ 05 мая 2020

Вам нужно отсортировать список. После сортировки просто отправьте список адаптеру. вот ссылка как использовать сортировку

0 голосов
/ 05 мая 2020

Java Collections.reverseOrder

По умолчанию Collection.sort выполняет сортировку в порядке возрастания. Если мы хотим отсортировать элементы в обратном порядке, мы могли бы использовать следующие методы: reverseOrder (): возвращает компаратор, который устанавливает обратный естественный порядок элементов коллекции. reverseOrder (Comparator cmp): возвращает Comparator, который устанавливает обратный порядок указанного компаратора. Вот примеры для обоих этих методов

Collections.sort(products,Collections.reverseOrder());
0 голосов
/ 05 мая 2020

Это пример кода для сортировки

Collections.sort(yourLists, new Comparator<YourList>() {
        @Override
        public int compare(YourList lhs, YourList rhs) {
            return lhs.getId().compareTo(rhs.getId());
        }
    });

Надеюсь, это сработает!

Спасибо! Удачного кодирования!

...