地图上的折线无法删除。

3
我正在开发一个使用Google Maps Android API的Android应用程序,但是我在清除地图上的折线时遇到了问题。我已经在对话框中实现了折线的添加,并且希望在按下“清除”按钮时删除当前显示的折线。然而,折线并没有如预期般被删除。
问题描述:
当选择特定路线时,我有一个对话框显示带有折线的Google地图。以下是代码结构的概述:
我创建并显示一个对话框,在地图上显示选定路线的折线。 对话框中有一个“清除”按钮(clearRouteBtn),应该从地图上删除显示的折线。 我正在使用的折线。
问题:
问题是,当我点击“清除”按钮时,它并没有从地图上删除折线,尽管我使用了PolylineView.remove()。日志消息显示折线已被删除,但它仍然在地图上可见。
我尝试过添加日志消息来验证PolylineView不为空。 我还确保按钮的点击监听器已正确设置。
预期行为:
当我点击“清除”按钮时,我希望当前显示的折线从地图上移除。
实际行为:
点击“清除”按钮时,折线没有从地图上移除。
其他信息:
该应用程序使用Google Maps Android API。 折线是通过PolylineView = mMap.addPolyline(polylineOptions)添加的。 “清除”按钮的可见性最初设置为INVISIBLE。
非常感谢您对如何解决此问题的任何建议或见解。

    public Polyline currentPolyline;

    public  Polyline PolylineView;


这是第二条折线的位置和我的清除按钮。

                    Button buttonOkay = dialogView.findViewById(R.id.button);
                    buttonOkay.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                            for (AlertDialog openDialog : openDialogs) {
                                if ("RouteForBalibagoHighway".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForBalibagoHighway
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForBalibagoHighway)
                                            .width(8)
                                            .color(jeep_grey);
                                    PolylineView = mMap.addPolyline(polylineOptions);
                                    Log.d("Debug", "PolylineView: " + PolylineView);
                                } else if ("RouteForBalibagoHolyHighway".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForBalibagoHolyHighway
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForBalibagoHolyHighway)
                                            .width(8)
                                            .color(jeep_purple);
                                    PolylineView = mMap.addPolyline(polylineOptions);
                                    Log.d("Debug", "PolylineView: " + PolylineView);
                                } else if ("RouteForVillaPampang".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForVillaPampang
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForVillaPampang)
                                            .width(8)
                                            .color(jeep_yellow);
                                    PolylineView = mMap.addPolyline(polylineOptions);
                                    Log.d("Debug", "PolylineView: " + PolylineView);
                                } else if ("RouteForSapangBato".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForVillaPampang
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForSapangBato)
                                            .width(8)
                                            .color(Color.RED);
                                    PolylineView = mMap.addPolyline(polylineOptions);
                                    Log.d("Debug", "PolylineView: " + PolylineView);
                                }else if ("RouteForPandan".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForVillaPampang
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForPandan)
                                            .width(8)
                                            .color(Color.BLUE);
                                    PolylineView = mMap.addPolyline(polylineOptions);
                                    Log.d("Debug", "PolylineView: " + PolylineView);
                                }else if ("RouteForMaingate".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForVillaPampang
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForMaingate)
                                            .width(8)
                                            .color(jeep_brown);
                                    PolylineView = mMap.addPolyline(polylineOptions);
                                }else if ("RouteForSunset".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForVillaPampang
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForSunset)
                                            .width(8)
                                            .color(jeep_orange);
                                    PolylineView = mMap.addPolyline(polylineOptions);
                                    Log.d("Debug", "PolylineView: " + PolylineView);
                                }else if ("RouteForHenson".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForVillaPampang
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForHenson)
                                            .width(8)
                                            .color(jeep_white);
                                    PolylineView = mMap.addPolyline(polylineOptions);
                                    Log.d("Debug", "PolylineView: " + PolylineView);
                                }else if ("RouteForMarisolPampang".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForVillaPampang
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForMarisolPampang)
                                            .width(8)
                                            .color(Color.GREEN);
                                    PolylineView = mMap.addPolyline(polylineOptions);

                                    Log.d("Debug", "PolylineView: " + PolylineView);
                                }else if ("RouteForCapaya".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForVillaPampang
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForCapaya)
                                            .width(8)
                                            .color(jeep_pink);
                                    PolylineView = mMap.addPolyline(polylineOptions);
                                    Log.d("Debug", "PolylineView: " + PolylineView);
                                }


                                // THIS IS WHERE I PUT MY CLEAR BUTTON
                                clearRouteBtn.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                        if (PolylineView != null) {
                                            PolylineView.remove();
                                            Log.d("Debug", "Removed: " + PolylineView);
                                        } else {
                                            // Handle the case where the polyline couldn't be added
                                        }
                                    }
                                });

                                // After adding the polyline, make the clear button visible
                                clearRouteBtn.setVisibility(View.VISIBLE);
                                discountApplied = false; // Mark the discount as applied
                                openDialog.dismiss();
                            }


                        }
                    });
                    
                } else {
                    Log.e(TAG, "No layout resource found for custom route: " + customRouteLabel);
                }
            }


你不必用那么多路线来打扰我们。那些if else if语句也不必要。一个就够了。请简化你的代码。 - undefined
1
你可能会遇到一些看起来像“多段线未移除”的重叠线条,因为仅仅移除一个是不够的。此外,你在循环openDialogs上使用单个变量PolylineView是不起作用的 - 它只会清除最后添加的多段线。另外,一旦你移除了一条多段线,你需要将PolylineView重置为null,因为你的一系列条件语句可能不会产生多段线。 - undefined
嗨 @Computable,非常感谢你的评论和建议!你的见解真的很有帮助。我按照你的建议创建了一个数组来存储在循环中添加的折线,解决了重叠线的问题。我还确保在删除折线时将PolylineView变量重置为null,就像你建议的那样。这些改变显著提高了代码的质量。我非常感谢你的意见,它产生了很大的影响。再次感谢! - undefined
1个回答

1
我通过为折线添加一个ArrayList来解决了这个问题。这样我就可以将每条新添加的线存储在ArrayList中,并在清除线条后将PolylineView设置为null。我还将清除按钮移出了for循环,以防止出现意外行为。

  List<Polyline> polylines  = new ArrayList<>();


Button buttonOkay = dialogView.findViewById(R.id.button);
                    buttonOkay.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                            for (AlertDialog openDialog : openDialogs) {

                                Polyline PolylineView = null;

                                if ("RouteForBalibagoHighway".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForBalibagoHighway
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForBalibagoHighway)
                                            .width(8)
                                            .color(jeep_grey);
                                    PolylineView = mMap.addPolyline(polylineOptions);

                                    if (PolylineView != null) {
                                        polylines.add(PolylineView);
                                        Log.d("Debug", "PolylineView: " + PolylineView);
                                    }

                                } else if ("RouteForBalibagoHolyHighway".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForBalibagoHolyHighway
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForBalibagoHolyHighway)
                                            .width(8)
                                            .color(jeep_purple);
                                    PolylineView = mMap.addPolyline(polylineOptions);


                                    if (PolylineView != null) {
                                        polylines.add(PolylineView);
                                        Log.d("Debug", "PolylineView: " + PolylineView);
                                    }
                                    Log.d("Debug", "PolylineView: " + PolylineView);

                                } else if ("RouteForVillaPampang".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForVillaPampang
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForVillaPampang)
                                            .width(8)
                                            .color(jeep_yellow);
                                    PolylineView = mMap.addPolyline(polylineOptions);

                                    if (PolylineView != null) {
                                        polylines.add(PolylineView);
                                        Log.d("Debug", "PolylineView: " + PolylineView);
                                    }
                                    Log.d("Debug", "PolylineView: " + PolylineView);
                                } else if ("RouteForSapangBato".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForVillaPampang
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForSapangBato)
                                            .width(8)
                                            .color(Color.RED);
                                    PolylineView = mMap.addPolyline(polylineOptions);


                                    if (PolylineView != null) {
                                        polylines.add(PolylineView);
                                        Log.d("Debug", "PolylineView: " + PolylineView);
                                    }
                                    Log.d("Debug", "PolylineView: " + PolylineView);
                                }else if ("RouteForPandan".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForVillaPampang
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForPandan)
                                            .width(8)
                                            .color(Color.BLUE);
                                    PolylineView = mMap.addPolyline(polylineOptions);

                                    if (PolylineView != null) {
                                        polylines.add(PolylineView);
                                        Log.d("Debug", "PolylineView: " + PolylineView);
                                    }
                                    Log.d("Debug", "PolylineView: " + PolylineView);
                                }else if ("RouteForMaingate".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForVillaPampang
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForMaingate)
                                            .width(8)
                                            .color(jeep_brown);
                                    PolylineView = mMap.addPolyline(polylineOptions);

                                    if (PolylineView != null) {
                                        polylines.add(PolylineView);
                                        Log.d("Debug", "PolylineView: " + PolylineView);
                                    }
                                }else if ("RouteForSunset".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForVillaPampang
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForSunset)
                                            .width(8)
                                            .color(jeep_orange);
                                    PolylineView = mMap.addPolyline(polylineOptions);

                                    if (PolylineView != null) {
                                        polylines.add(PolylineView);
                                        Log.d("Debug", "PolylineView: " + PolylineView);
                                    }
                                }else if ("RouteForHenson".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForVillaPampang
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForHenson)
                                            .width(8)
                                            .color(jeep_white);
                                    PolylineView = mMap.addPolyline(polylineOptions);

                                    if (PolylineView != null) {
                                        polylines.add(PolylineView);
                                        Log.d("Debug", "PolylineView: " + PolylineView);
                                    }
                                }else if ("RouteForMarisolPampang".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForVillaPampang
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForMarisolPampang)
                                            .width(8)
                                            .color(Color.GREEN);
                                    PolylineView = mMap.addPolyline(polylineOptions);

                                    if (PolylineView != null) {
                                        polylines.add(PolylineView);
                                        Log.d("Debug", "PolylineView: " + PolylineView);
                                    }
                                }else if ("RouteForCapaya".equals(customRouteLabel)) {
                                    // Handle "Okay" button click for RouteForVillaPampang
                                    PolylineOptions polylineOptions = new PolylineOptions()
                                            .addAll(customRouteForCapaya)
                                            .width(8)
                                            .color(jeep_pink);
                                    PolylineView = mMap.addPolyline(polylineOptions);

                                    if (PolylineView != null) {
                                        polylines.add(PolylineView);
                                        Log.d("Debug", "PolylineView: " + PolylineView);
                                    }
                                }

                                // After adding the polyline, make the clear button visible
                                clearRouteBtn.setVisibility(View.VISIBLE);
                                discountApplied = false; // Mark the discount as applied
                                openDialog.dismiss();
                            }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接