如何解决在RecyclerView中找不到在地图上显示距离的方法
我正在尝试制作一个用于拖车服务的实时跟踪应用程序。我遵循了Google的教程:https://codelabs.developers.google.com/codelabs/realtime-asset-tracking/index.html?index=..%2F..index#0,该教程使用Firebase实时数据库存储位置。我最终得到了一个应用程序,该应用程序通过标记显示了已注册的拖车服务的位置。之后,我修改了代码以获取当前位置。在地图上显示拖车服务的代码:
private void subscribeToUpdates() {
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("TowService");
ref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot,String previousChildName) {
setMarker(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot,String previousChildName) {
setMarker(dataSnapshot);
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot,String previousChildName) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onCancelled(DatabaseError error) {
Log.d(TAG,"Failed to read value.",error.toException());
}
});
}
private void setMarker(DataSnapshot dataSnapshot) {
// When a location update is received,put or update
// its value in mMarkers,which contains all the markers
// for locations received,so that we can build the
// boundaries required to show them all on the map at once
String key = dataSnapshot.getKey();
double lat = Double.parseDouble(dataSnapshot.child("userLocation").child("latitude").getValue().toString());
double lng = Double.parseDouble(dataSnapshot.child("userLocation").child("longitude").getValue().toString());
LatLng location = new LatLng(lat,lng);
// CALCULATING DISTANCE FROM CURRENT LOCATION TO MARKER
Location currentLocation = new Location("current");
currentLocation.setLatitude(lastKnownLocation.getLatitude());
currentLocation.setLongitude(lastKnownLocation.getLongitude());
Location towLocation = new Location("notCurrent");
towLocation.setLatitude(lat);
towLocation.setLongitude(lng);
float distance = currentLocation.distanceTo(towLocation) / 1000;
DecimalFormat decimalFormat = new DecimalFormat();
decimalFormat.setMaximumFractionDigits(2);
if (!mMarkers.containsKey(key)) {
mMarkers.put(key,mMap.addMarker(new MarkerOptions().title(decimalFormat.format(distance) + "KM").position(location)));
} else {
mMarkers.get(key).setPosition(location);
}
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (Marker marker : mMarkers.values()) {
builder.include(marker.getPosition());
}
}
currentLocation是用户的当前位置,而towLocation是我从Firebase实时数据库获得的拖车服务的位置。在这里,我设置标记标题以显示用户与拖车服务之间的距离。所有这些工作正常,但现在我也想在RecyclerView中显示所有拖车服务并显示距离。 TowService类:
public class TowService {
private String towName;
private String towEmail;
private float towDistance;
public TowService() {
}
public TowService(String towName,String towEmail) {
this.towName = towName;
this.towEmail = towEmail;
}
public void setTowName(String towName) {
this.towName = towName;
}
public void setTowEmail(String towEmail) {
this.towEmail = towEmail;
}
public void setTowDistance(float towDistance) {
this.towDistance = towDistance;
}
public String getTowName() {
return towName;
}
public String getTowEmail() {
return towEmail;
}
public float getTowDistance(){
}
}
Tow服务适配器:
public class TowServiceAdapter extends RecyclerView.Adapter<TowServiceAdapter.TowServiceViewHolder> {
private Context mContext;
private List<TowService> mTowServices;
public TowServiceAdapter(Context context,List<TowService> towServices) {
mContext = context;
mTowServices = towServices;
}
@NonNull
@Override
public TowServiceViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.tow_service_item,parent,false);
return new TowServiceViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull TowServiceViewHolder holder,int position) {
TowService currentTowService = mTowServices.get(position);
holder.towName.setText(currentTowService.getTowName());
holder.towEmail.setText(currentTowService.getTowEmail());
//holder.towDistance.setText(String.valueOf(currentTowService.getTowDistance()));
}
@Override
public int getItemCount() {
return mTowServices.size();
}
public class TowServiceViewHolder extends RecyclerView.ViewHolder {
TextView towName;
TextView towEmail;
TextView towDistance;
public TowServiceViewHolder(@NonNull View itemView) {
super(itemView);
towName = itemView.findViewById(R.id.tow_service_name);
towEmail = itemView.findViewById(R.id.tow_service_email);
towDistance = itemView.findViewById(R.id.tow_service_distance);
}
}
}
我的想法是:在MapsActivity中创建一个函数,该函数将返回距离,然后在 public float getTowDistance()方法中使用该函数,然后再使用 getTowDistance()的结果em>在适配器中,如前所示。但是到目前为止,我尝试过的所有方法都失败了。有人知道我该怎么做吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。