Android 在MarkerClickListener上显示警报对话框
我有一个for循环,它为数据库中的每个条目绘制标记。但是,我希望这样,当单击时,每个标记都会在材质警报对话框中显示该标记的特定信息(从数据库检索的信息) 现在,我正试图做到这一点,在创建标记时将我想要的信息放入标记中。然后,在创建警报对话框时,我从标记中获取信息并将其放在对话框中 然而,这并没有奏效。当我单击一个标记时,无论它是什么标记,它总是直接转到click listener中的else语句——它会显示一条Toast消息,上面写着“Other” 没有错误消息,但它不工作 如何解决此问题,以便在单击每个标记时在警报对话框上显示每个标记的特定信息 这是我的密码:Android 在MarkerClickListener上显示警报对话框,android,google-maps,material-ui,google-maps-markers,Android,Google Maps,Material Ui,Google Maps Markers,我有一个for循环,它为数据库中的每个条目绘制标记。但是,我希望这样,当单击时,每个标记都会在材质警报对话框中显示该标记的特定信息(从数据库检索的信息) 现在,我正试图做到这一点,在创建标记时将我想要的信息放入标记中。然后,在创建警报对话框时,我从标记中获取信息并将其放在对话框中 然而,这并没有奏效。当我单击一个标记时,无论它是什么标记,它总是直接转到click listener中的else语句——它会显示一条Toast消息,上面写着“Other” 没有错误消息,但它不工作 如何解决此问题,以便
redColRef.get(source)
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
java.util.Map<String, Object> mapOfPins = (HashMap<String, Object>) document.get("Location");
if (mapOfPins != null) {
Log.d(TAG, mapOfPins.get("latitude") + ", " + mapOfPins.get("longitude"));
pins = new LatLng(Double.valueOf(mapOfPins.get("latitude").toString()), Double.valueOf(mapOfPins.get("longitude").toString()));
direction = document.get("Direction").toString();
sender = document.get("Sender").toString();
java.util.Map<String, Object> detailsTag = new HashMap();
detailsTag.put("Location", pins);
detailsTag.put("Direction", direction);
detailsTag.put("Sender", sender);
switch (direction) {
case "North":
case "South":
map.addMarker(new MarkerOptions()
.title("Pole Pin")
.zIndex(0.6f)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.yellow))
.position(pins));
// I realize that the "setTag()" is outside of the "addMarker()" so it doesn't work. But, I'm not sure how to fix that so that the tag is set.
.setTag(detailsTag);
break;
case "East":
case "West":
map.addMarker(new MarkerOptions()
.title("East-West Pin")
.zIndex(0.7f)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.orange))
.position(pins))
.setTag(detailsTag);
break;
case "Other":
map.addMarker(new MarkerOptions()
.title("Other Pin")
.zIndex(0.8f)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.red))
.position(pins))
.setTag(detailsTag);
break;
}
}
}
} else {
Log.d(TAG, task.getException().getMessage());
}
}
});
map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
if (marker.getTag() != null) {
if (marker.getTitle().toString() == "Pole Pin") {
java.util.Map markerDetails= (HashMap) marker.getTag();
new MaterialAlertDialogBuilder(getActivity())
.setTitle("Pole Pin")
.setMessage("Location: " + markerDetails.get("Location").toString() + "\n Direction: " + markerDetails.get("Direction") + "\n Sender: " + markerDetails.get("Sender"))
.setPositiveButton("View Details", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent inte = new Intent(getActivity(), login.class);
startActivity(inte);
}
})
.show();
} else {
Toast.makeText(getActivity(), "Other", Toast.LENGTH_SHORT).show();
}
}
return true;
}
});
redColRef.get(源代码)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
对于(QueryDocumentSnapshot文档:task.getResult()){
java.util.MapMapOfPins=(HashMap)document.get(“位置”);
if(mapOfPins!=null){
Log.d(标记,mapOfPins.get(“纬度”)+,“+mapOfPins.get(“经度”));
pins=new LatLng(Double.valueOf(mappofpins.get(“纬度”).toString()),Double.valueOf(mappofpins.get(“经度”).toString());
方向=document.get(“方向”).toString();
sender=document.get(“sender”).toString();
java.util.Map detailsTag=new HashMap();
详细状态放置(“位置”,引脚);
详细说明阶段投入(“方向”,方向);
详细的stag.put(“发送方”,发送方);
开关(方向){
“北”案:
“南方”案:
addMarker(新的MarkerOptions()
.标题(“杆销”)
.zIndex(0.6f)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.yellow))
.位置(销));
//我意识到“setTag()”在“addMarker()”之外,所以它不起作用。但是,我不知道如何修复它,以便设置标记。
.setTag(detailsTag);
打破
“东”案:
“西部”案:
addMarker(新的MarkerOptions()
.标题(“东西针”)
.zIndex(0.7f)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.orange))
.位置(销)
.setTag(detailsTag);
打破
案例“其他”:
addMarker(新的MarkerOptions()
.标题(“其他Pin”)
.zIndex(0.8f)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.red))
.位置(销)
.setTag(detailsTag);
打破
}
}
}
}否则{
Log.d(标记,task.getException().getMessage());
}
}
});
setOnMarkerClickListener(新的GoogleMap.OnMarkerClickListener(){
@凌驾
公共布尔onMarkerClick(标记){
if(marker.getTag()!=null){
if(marker.getTitle().toString()=“极针”){
java.util.Map markerDetails=(HashMap)marker.getTag();
新材料AlertDialogBuilder(getActivity())
.setTitle(“杆销”)
.setMessage(“位置:“+markerDetails.get”(“位置”).toString()+”\n方向:“+markerDetails.get”(“方向”)+”\n发送方:“+markerDetails.get”(“发送方”))
.setPositiveButton(“查看详细信息”,新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
Intent inte=newintent(getActivity(),login.class);
星触觉(inte);
}
})
.show();
}否则{
Toast.makeText(getActivity(),“Other”,Toast.LENGTH_SHORT).show();
}
}
返回true;
}
});
如果有人能帮我,我会非常感激的
提前谢谢。设置标记的正确方法是获取
addMarker
的标记结果,然后调用.setTag()
:
对每种情况都做同样的处理
下面是标记
类的API:
我还注意到您的字符串比较是错误的,u
Marker m = map.addMarker(
new MarkerOptions()
.title("Pole Pin")
.zIndex(0.6f)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.yellow))
.position(pins));
m.setTag(detailsTag);
if (marker.getTitle().equals("Pole Pin")) {
//...
}