1

多くの人が持っていた問題がありますが、どうすればそれから抜け出すことができないのか分かりません。 私の場合は助けてください、重複していると印を付けないでください。 私はfirebaseとリンクされたrecyclerviewを持っています。 私recyclerviewはMyAdapterというカスタムアダプタを持っていますリオーダーカスタムアダプターを使用したRecyclerviewアイテム

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を持っています。この文字列は、各recyclerview項目の番号です。 より低い値から高い値へのすべてのrecyclerview項目を並べ替える必要があります(文字列Distanzaの値)。

は、これは私の大学地区私はArrayListのために使用するクラスです:終わりそう

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の上部にそれらを並べ替える必要があります他のものよりも。 どうすればいいですか?私は本当に考えていない、と申し訳ありませんが、私はこれで新しいです。

+0

なぜfirebase-databaseタグを追加しましたか? firebaseデータベースからデータを取得していますか? –

+0

正確には、そこからデータを取得します。 –

答えて

1

MyAdapterに渡す前にデータを並べ替えることができます。 Collectionsクラスのsortメソッドを使用できます。終わり

Collections.sort(studi, new Comparator<Studi>() { 
    public int compare(Studi s1, Studi s2) { 
      return s1.getDistanza() - s2.getDistanza(); 
    } 
}) 

、あなたのデータをフィルタリングするたびに、それは常にgetDistanzaソートを尊重します:あなたはこのような何かを持っているでしょう。

+0

empListとは何ですか? –

+0

あなたのコードに合わせて更新しました。しかしそれはあなたのアイテムのリストです。 –

+0

intに "、"がある場合、どうすればいいですか? –

1

recyclerViewを膨らませている間にデータを並べ替えるべきではありません。実際にfirebase-databaseからデータをフェッチしているので、結果をソートした形式で取得する必要があります。あなたはあなたのリストには、距離の増加順(あなたのケースで。距離)になりたい場合は

は、ちょうどこの

const query = itemsRef.orderByChild('distanza'); 

ようなクエリのものを使用これはあなたがソートする必要がいけないソートされた配列を与えますもう

P.S. recyclerViewにリアルタイムで変更を加えたい場合は、カスタムアダプタを使用せず、代わりにfirebaseRecyclerviewAdapterを使用してください。

+0

recyclerviewのクエリを開始するにはどうすればよいですか?どこに置いたらいいですか? –

+0

あなたは@Alfredを学ばなければならないでしょう。クエリを最初に起動させ、結果を 'arrayList'で取得する必要があります。それでは、recyclerViewだけが画像になります。それはGoogleです。 –

+0

アダプタでクエリを実行し、arrayListの結果をrecyclerviewに設定する必要がありますか? –

関連する問題