[英]Reorder Recyclerview items with custom adapter
我有很多人遇到的问题,但是我不明白如何摆脱它。 请为我提供帮助,请勿将其标记为重复。 我有一个与firebase链接的recyclerview。 我的recyclerview有一个名为MyAdapter的自定义适配器:
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;
}
@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){
String name = studi.get(position).getName();
String desc = studi.get(position).getDescription();
String prof = studi.get(position).getProfessione();
String tel = studi.get(position).getTelefono();
String coord1 = studi.get(position).getCoordinata1();
String coord2 = studi.get(position).getCoordinata2();
String distanza = studi.get(position).getDistanza();
holder.nameTxt.setText(name);
holder.descTxt.setText(desc);
holder.profTxt.setText(prof);
holder.telTxt.setText(tel);
holder.pos1Txt.setText(coord1);
holder.pos2Txt.setText(coord2);
holder.distanza.setText(distanza);
}
@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;
}}
所有项目都在其中写入String Distanza的地方有一个textview。 该字符串是每个recyclerview项目的数字。 我需要将所有recyclerview项从低到高(字符串Distanza的值)重新排序。
这是我用于数组列表的Studi类:
public class Studi {
private String name;
private String description;
private String professione;
private String telefono;
private String coordinata1;
private String coordinata2;
private String distanza;
public void setDistanza(String distanza) {
this.distanza = distanza;
}
public String getDistanza() {
return distanza;
}
public String getCoordinata2() {
return coordinata2;
}
public void setCoordinata2(String coordinata2) {
this.coordinata2 = coordinata2;
}
public String getCoordinata1() {
return coordinata1;
}
public void setCoordinata1(String coordinata1) {
this.coordinata1 = coordinata1;
}
public String getProfessione() {
return professione;
}
public void setProfessione(String professione) {
this.professione = professione;
}
public String getTelefono() {
return telefono;
}
public void setTelefono(String telefono) {
this.telefono = telefono;
}
public Studi() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}}
因此,最后,我需要在返回的getDistanza()值低于其他值的那些代码中,在recyclerview的顶部对其进行重新排序。 我该怎么做? 我真的不知道,很抱歉,但是我是新来的。
您可以在将数据传递给MyAdapter
之前对其进行MyAdapter
。 您可以使用Collections
类中的sort
方法。 您将具有以下内容:
Collections.sort(studi, new Comparator<Studi>() {
public int compare(Studi s1, Studi s2) {
return s1.getDistanza() - s2.getDistanza();
}
})
最后,无论何时过滤数据,它都将始终遵循getDistanza
排序。
在对recyclerView
进行膨胀时,不应对数据进行排序。 实际上,既然您已经从firebase-database中获取数据,则应相应地使用查询以排序形式获得结果。
如果您希望列表按距离的顺序递增(在您的情况下为distanza),只需使用类似这样的查询
const query = itemsRef.orderByChild('distanza');
这将为您提供一个排序数组,您不再需要对其进行排序。
PS:如果您希望recyclerView
实时更改,请不要使用自定义适配器,而要使用firebaseRecyclerviewAdapter。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.