【发布时间】:2019-01-07 09:38:09
【问题描述】:
我正在使用 firebase 数据库来存储用户的 lat 和 lng。以这种方式,
现在,当我在我的 recyclerview 中检索它们时,我使用以下代码计算从我当前位置到该用户位置的距离,
private void loadLocationForThisUser(Double lat, Double lng, Double lat1,
Double lng1) {
//Create location from user coordinates
currentUser1 = new Location("");
currentUser1.setLatitude(lat);
currentUser1.setLongitude(lng);
//Create location from friend coordinates
friend1 = new Location("");
friend1.setLatitude(lat1);
friend1.setLongitude(lng1);
distance = (new DecimalFormat("#.#").format((currentUser1.distanceTo(friend1)) / 1000)+ "km");
}
并在我的 firebase recyclerview 适配器中按以下方式调用此方法,
FirebaseRecyclerOptions<Contacts> options = new FirebaseRecyclerOptions.Builder<Contacts>()
.setQuery(UsersRef, Contacts.class)
.build();
adapter = new FirebaseRecyclerAdapter<Contacts, FindFriendViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final FindFriendViewHolder holder, int position, @NonNull final Contacts model) {
lat = mLastLocation.getLatitude();
lng = mLastLocation.getLongitude();
lat1 = Double.parseDouble(model.getMylat());
lng1 = Double.parseDouble(model.getMylng());
loadLocationForThisUser(lat, lng, lat1, lng1);
holder.txt_distance.setText(distance);
}
@NonNull
@Override
public FindFriendViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.users_display_layout_small, viewGroup, false);
FindFriendViewHolder viewHolder = new FindFriendViewHolder(view);
return viewHolder;
}
};
adapter.startListening();
FindFriendsRecyclerList.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
这会在我的 recyclerview 中填充用户及其距离的视图持有者,即他们与我的距离。但是该列表是按照它存储在 firebase 数据库中的顺序填充的,因此用户列表没有根据他们的距离进行排序。如果用户 A 比用户 B 离我更远,但在数据库中他存储在用户 B 之上,那么在输出中用户 A 也在用户 B 之上。预期的输出是用户 B 应该在回收站视图中高于用户 A 作为他的距离与用户 A 相比,它要小。因此,对于所有用户,它应该检查谁离我更近,并将它们放在比我远的上面,基本上根据与我的距离对它们进行排序。
【问题讨论】:
-
您可以尝试此处显示的
getItem技巧:stackoverflow.com/a/40383539。如果这对您不起作用,您必须实现自己的适配器:stackoverflow.com/questions/53308643/… -
我尝试了
getItem,但不知道如何解决我的问题,例如如何使用getItem方法按递增顺序对距离进行排序?
标签: android firebase firebase-realtime-database android-recyclerview firebaseui