简体   繁体   English

根据int参数对RecyclerView数组中的项目进行排序

[英]Sort items in RecyclerView array according to an int parameter

I have an Arraylist with 5 items. 我有一个包含5个项目的Arraylist。 Each of those items has a priority. 这些项目均具有优先级。 Want I want to do is sort those items according to that priority. 我想做的就是根据优先级对这些项目进行排序。 Lets say item 3 has priority 100 , then that item should go first in the list. 假设项目3的优先级为100,那么该项目应该在列表中排在第一位。 Item 0 has priority -10, then that item has to go last in the list. 项目0的优先级为-10,则该项目必须在列表中排在最后。 How do I implement something like that? 我该如何实现呢? Adapterclass: 适配器类:

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.cardViewHolder> {
private ArrayList<Card> item;
public CardAdapter(ArrayList<Card> item){
    this.item = item;
}

@Override
public cardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_layout,parent,false);
    cardViewHolder card = new cardViewHolder(v);

    return card;
}

@Override
public void onBindViewHolder(cardViewHolder holder, int position) {
    holder.titel.setText(item.get(position).getTitel());
    holder.card_icon.setImageResource(item.get(position).getIcon());
    holder.load_more.setText("Load more");

}

@Override
public int getItemCount() {
    return item.size();
}

public static class cardViewHolder extends RecyclerView.ViewHolder{
    TextView titel;
    ImageView card_icon;
    TextView load_more;
    public cardViewHolder(View itemView){
        super(itemView);
        titel = (TextView)itemView.findViewById(R.id.titel);
        card_icon = (ImageView)itemView.findViewById(R.id.card_icon);
        load_more = (TextView)itemView.findViewById(R.id.loadmore);
    }

}}

Main class 主班

public class MainActivity extends ActionBarActivity {
private RecyclerView recycler;
private RecyclerView.LayoutManager lmanager;
private RecyclerView.Adapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ArrayList<Card> data = new ArrayList<Card>();
    data.add(new Card(R.drawable.mensa, "Mensa", "mensa"));
    data.add(new Card(R.drawable.book, "Bibliothek", "bibliothek"));
    data.add(new Card(R.drawable.timetable, "Stundenplan", "timetable"));
    data.add(new Card(R.drawable.message, "Mitteilungen", "mitteilungen"));
    data.add(new Card(R.drawable.noten, "Noten", "noten"));


    recycler = (RecyclerView)findViewById(R.id.recycler);
    lmanager = new LinearLayoutManager(this);
    recycler.setLayoutManager(lmanager);
    adapter = new CardAdapter(data);
    recycler.setAdapter(adapter);



}}

Card class 卡类

public class Card {
private String titel;
private int card_icon;
private String id;
private int priority;


public Card(int icon, String titel, String id) {
    this.card_icon = icon;
    this.titel = titel;
    this.id = id;
    priority=0;
}

public String getTitel() {
    return titel;
}

public int getIcon() {
    return card_icon;
}

public String getId() {
    return id;
}
public void setPriority(int priority){
    this.priority = priority;
}}

Add the priority to the Card Object. 将优先级添加到Card对象。 eg. 例如。

data.add(new Card(id, name, description, priority);

Sort the arraylist with custom Comparator For eg. 使用自定义Comparator对arraylist进行排序,例如。

    public class CustomComparator implements Comparator<Card> {
        @Override
        public int compare(Card card1, Card card2) {
            Integer priority1 = card1.getPriority();
            Integer priority2 = card2.getPriority();
            return priority2.compareTo(priority1);
        }
    }

Collections.sort(data, new CustomComparator());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM