使用自定义适配器重新排序RecyclerView项目位置,而不使用

时间:2017-02-20 17:21:19

标签: java android collections android-recyclerview comparator

今天我有这个问题: 我试图根据一个重要因素改变项目位置。 我的意思是:如果我的对象有一个等于特定值的字符串(我在此方法之前得到)XX,它应该添加到我的RecyclerView的第一个位置。 否则处于正常位置。 所以我只是通过

在我的RecyclerView活动中做到这一点
if (myString.equals("XX")) {
            studi.add(0, s); //here if it respect the if statement goes to at the top position
        }
        //else its normal pos.
        else {
            studi.add(s); 
        }

使用“studi”customArray ...

设置RecyclerView适配器

问题是我在myAdapter上使用比较器来排序我的所有RecyclerView项目,即使我在索引0处添加项目,我的比较器也设置在它所说的位置。 那我怎么能做我想要的呢? 我希望我能很好地解释我的问题。 如果没有抱歉。

这是我的适配器:

public class MyAdapter extends RecyclerView.Adapter<MyHolder> implements Filterable {

Context c;
ArrayList<Studi> studi;
ArrayList<Studi> filterList;
CustomFilter filter;

public MyAdapter(Context c, ArrayList<Studi> studi) {
    this.c = c;
    this.studi = studi;
    this.filterList = studi;
    //ordina per vicinanza

    Collections.sort(studi, new Comparator<Studi>() {
        public int compare(Studi s1, Studi s2) {
            //solo se non sono annunci
            if (s1.getDistanza() != null && s2.getDistanza() != null) {
                return Integer.parseInt(s1.getDistanza()) - Integer.parseInt(s2.getDistanza());
            } else return 1;
        }
    });

    //se gli studi non hanno la distanza vanno infondo
    Collections.sort(studi, new Comparator<Studi>() {
        public int compare(Studi s1, Studi s2) {
            boolean item1Match = s1.getDistanza() == null;
            boolean item2Match = s2.getDistanza() == null;
            if (item1Match == item2Match) {
                return 0;
            }
            return item1Match ? 1 : -1;
        }
    });
}

@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.model, parent, false);
    MyHolder holder = new MyHolder(v);
    return holder;
}

@Override
public void onBindViewHolder(MyHolder holder, int position) {
    ...
}

@Override
public int getItemCount() {
    return (studi == null) ? 0 : studi.size();
}

//FILTER THING......................
public Filter getFilter() {
    if (filter == null) {
        filter = new CustomFilter(filterList, this);
    }
    return filter;
}

}

0 个答案:

没有答案