Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在MarkerClickListener上显示警报对话框_Android_Google Maps_Material Ui_Google Maps Markers - Fatal编程技术网

Android 在MarkerClickListener上显示警报对话框

Android 在MarkerClickListener上显示警报对话框,android,google-maps,material-ui,google-maps-markers,Android,Google Maps,Material Ui,Google Maps Markers,我有一个for循环,它为数据库中的每个条目绘制标记。但是,我希望这样,当单击时,每个标记都会在材质警报对话框中显示该标记的特定信息(从数据库检索的信息) 现在,我正试图做到这一点,在创建标记时将我想要的信息放入标记中。然后,在创建警报对话框时,我从标记中获取信息并将其放在对话框中 然而,这并没有奏效。当我单击一个标记时,无论它是什么标记,它总是直接转到click listener中的else语句——它会显示一条Toast消息,上面写着“Other” 没有错误消息,但它不工作 如何解决此问题,以便

我有一个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")) {
    //...
}