Я создаю приложение для чата, которое показывает расстояние между мной и каждым пользователем.
Это выглядит следующим образом:
Есть ли способ отсортировать этот список таким образом, чтобы он показывал самый близкий первый и самый дальний последний? теперь он добавляет в соответствии с порядком, который он добавляет к адаптеру.
Мой код адаптера выглядит следующим образом:
public class MapPersonAdapter extends RecyclerView.Adapter<MapPersonAdapter.MyViewHolder> {
private View mView;
private List<MapPerson> personsList;
private FirebaseAuth auth;
StorageReference storageRef;
public class MyViewHolder extends RecyclerView.ViewHolder{
public TextView personName, personDistance;
public ImageView personProfile;
public ImageButton personChat;
public MyViewHolder(View view){
super(view);
personName = (TextView) view.findViewById( R.id.tvPersonName );
personDistance = (TextView) view.findViewById( R.id.tvDistance );
personProfile = (ImageView) view.findViewById( R.id.ivPersonPic );
personChat = (ImageButton) view.findViewById( R.id.imageChat );
mView = view;
}
}
public MapPersonAdapter(List<MapPerson> personsList){
this.personsList = personsList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View itemView = LayoutInflater.from( parent.getContext() ).inflate( R.layout.activity_map_person,parent,false);
return new MyViewHolder( itemView );
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
MapPerson mapPerson = personsList.get( position );
String ID = mapPerson.getPersonID();
FirebaseFirestore db = FirebaseFirestore.getInstance();
CollectionReference username = db.collection( "Users" ).document( ID ).collection( "UserData" );
username.get().addOnCompleteListener( new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
holder.personName.setText( document.getString( "username" ) );
}
} else {
Log.d( "Error", "Error getting documents: ", task.getException() );
}
}
} );
holder.personDistance.setText( mapPerson.getPersonDistance() + " km" );
@Override
public int getItemCount(){
return personsList.size();
}
}
Что я спрашиваю, могу ли я каким-либо образом сортировать, основываясь на значенииmapPerson.getPersonDistance()
.
Этот адаптер вызывается внутри цикла:
for (String PersonID : PeopleAround) {
DocumentReference docRef = db.collection( "Users" ).document(PersonID).collection( "Location" ).document(PersonID);
docRef.get().addOnCompleteListener( new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot doc2 = task.getResult();
float distance = CalculateDistance(Lat, Lon);
if (!PersonID.equals( auth.getUid() )) {
if (distance <= Radius) {
MapPerson mapPerson = new MapPerson( PersonID, new DecimalFormat( "##.##" ).format( distance ) );
personList.add( mapPerson );
mapPersonAdapter.notifyDataSetChanged();
}
}
}
}
} );
}