我有一个问题,很多人有,但我不明白我怎么能摆脱它。 在我的情况下请帮助我,不要标记为重复。 我有一个与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;
}}
所有项目都有一个textview里面写的字符串Distanza。此字符串是每个recyclerview项目的编号。 我需要将所有的recyclerview项目从低层重新排序到更高层(String Distanza的值)。
这是我用于arraylist的我的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;
}}
所以最后,我需要在recyclelerview的顶部对那些返回低于其他值的getDistanza()值重新排序。 我该怎么做?我真的不知道,对不起,但我是新人。
答案 0 :(得分:1)
您可以在将数据传递给MyAdapter
之前对其进行排序。您可以使用sort
类中的Collections
方法。你会有这样的事情:
Collections.sort(studi, new Comparator<Studi>() {
public int compare(Studi s1, Studi s2) {
return s1.getDistanza() - s2.getDistanza();
}
})
最后,无论何时过滤数据,它始终都会尊重getDistanza
排序。
答案 1 :(得分:1)
在对recyclerView
进行夸大时,不应对数据进行排序。现在你已经从firebase-database中获取了数据,你应该相应地使用你的查询来获得排序形式的结果。
如果您希望列表按距离递增(在您的情况下为distanza),请使用类似的查询
const query = itemsRef.orderByChild('distanza');
这将为您提供一个您不再需要排序的排序数组。
P.S。如果您希望recyclerView
实时更改,请不要使用自定义适配器,而应使用firebaseRecyclerviewAdapter。