java - android:没有获得关于标记点击的信息
问题描述
我在数据库中有四个条目,我正在使用改造来获取所有数据。API 工作正常我正在获取所有必要的数据。我想在标记单击时显示用户姓名、地址、号码和技能(来自数据库)并将它们设置在自定义警报对话框中。
问题
当我点击任何标记时,我只会得到最后一个条目。意味着在每个标记上,infoWindowClickListener
我每次只得到相同的姓名、地址、号码和技能。我也用标记保存索引,但我不知道如何使用该索引。
我想要的是?
每个标记都应显示自己的信息。任何人都可以帮助我在onInfoWindowClickListener
方法内部应该做什么来获取与每个标记相关的确切信息。如果您不太了解,请随时提出任何问题。
MapFragment.java:
public void onMapReady(final GoogleMap mMap) {
mGoogleMap = mMap;
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(0);
mLocationRequest.setFastestInterval(0);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
fetchLastLocation();
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
ApiInterface apiInterface2 = ApiClient.getClient().create(ApiInterface.class);
Call<AllDataResponse> call2 = apiInterface2.allLabours("showAds");
call2.enqueue(new Callback<AllDataResponse>() {
@Override
public void onResponse(Call<AllDataResponse> call, Response<AllDataResponse> response) {
if (response.body() != null) {
if (response.body().isError_bol()) {
String errosr = response.body().getError_message();
Toast.makeText(getActivity(), errosr, Toast.LENGTH_SHORT).show();
} else {
labourDataAlls = response.body().getAll_labours();
if (labourDataAlls != null) {
latLngData.addAll(labourDataAlls);
Log.v("TAaG", "LOGS" + latLngData.size());
for (int i = 0; i < latLngData.size(); i++) {
double lat = Double.parseDouble(latLngData.get(i).getLb_latitude());
double lng = Double.parseDouble(latLngData.get(i).getLb_longitude());
Str_lb_name = latLngData.get(i).getLb_name();
Str_lb_phone = latLngData.get(i).getLb_phone();
Str_lb_address = latLngData.get(i).getLb_address();
Str_lb_skill = latLngData.get(i).getLb_skills();
drawMarker(new LatLng(lat, lng), i);
}
Log.d("setr", String.valueOf(list));
Toast.makeText(getActivity(), "No Error", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getActivity(), "Unknown Error Occurs", Toast.LENGTH_SHORT).show();
}
}
}
}
@Override
public void onFailure(Call<AllDataResponse> call, Throwable t) {
Toast.makeText(getContext(), "" + t.toString(), Toast.LENGTH_SHORT).show();
}
});
mMap.setOnInfoWindowClickListener(this);
mMap.setMyLocationEnabled(true);
}
private void drawMarker(final LatLng point , final int index){
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(point).title(labourDataAlls.get(index).getLb_name()+index);
mGoogleMap.addMarker(markerOptions);
}
@Override
public void onInfoWindowClick(Marker marker) {
}
解决方案
向 googleMap 添加标记时的 setTag(index)
private void drawMarker(final LatLng point , final int index){
private Marker marker;
marker = mGoogleMap.addMarker(new MarkerOptions()
.position(point)
.title(labourDataAlls.get(index).getLb_name()+index);
marker.setTag(index);
}
@Override
public void onInfoWindowClick(Marker marker) {
int index = (int)(marker.getTag());
//Use index get Value from labourDataAlls
}
推荐阅读
- syntax - 如果使用一次,为什么这个 jq 表达式有效,而不是两次?
- javascript - 谷歌脚本表,合并数组中重复的行
- python - Python - 如何使用 Selenium 更改输入字段值
- php - 获取数组的值
- azure - 能否将 Azure 工件上传到 npmjs.org?
- visual-studio-code - VS Code - 完成很糟糕,这是我的设置吗?
- asp.net - 在 vb.net 中做一个 http 帖子在 iis 10 上看不到详细错误
- python - Wexpect 在 spawn() 方法处冻结
- c++ - 为什么 std::rotate 比这种方式更快?
- java - Spring Boot - @EnableScheduling 结合 spring-boot-starter-quartz