javaandroidgoogle-mapsgoogle-maps-android-api-2polyline

Polylines can't be remove on the map


I am working on an Android app that uses the Google Maps Android API, and I'm having trouble clearing polylines from the map. I have implemented the addition of polylines within a dialog, and I want to remove the currently displayed polyline when the "Clear" button is pressed. However, the polyline is not being removed as expected.

Problem Description:

I have a dialog that displays a Google Map with a polyline when a specific route is selected. Here is an overview of the code structure:

I create and display a dialog with the selected route's polyline on the map. I have a "Clear" button (clearRouteBtn) within the dialog, which should remove the displayed polyline from the map. The polylines I am using

Issue:

The problem is that when I click the "Clear" button, it doesn't remove the polyline from the map, even though I am using PolylineView.remove();. The log message indicates that the polyline is removed, but it remains visible on the map.

What I've Tried:

I tried adding log messages to verify that PolylineView is not null. I also ensured that the button's click listener is properly set. Expected Behavior:

When I click the "Clear" button, I expect the currently displayed polyline to be removed from the map.

Actual Behavior:

The polyline is not removed from the map when clicking the "Clear" button.

Additional Information:

The app uses the Google Maps Android API. The polyline is added using PolylineView = mMap.addPolyline(polylineOptions);. The visibility of the "Clear" button is initially set to INVISIBLE

Any suggestions or insights on how to resolve this issue would be greatly appreciated.


    public Polyline currentPolyline;

    public  Polyline PolylineView;

This is where the second polylines is located and my clear button


                    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);
                }
            }


Solution

  • "I solved the problem by adding an ArrayList for the polylines. This allows me to store each newly added line in the ArrayList, and I set the PolylineView to null after clearing the lines. I also moved the clear button outside the for loop to prevent unexpected behaviors."

    
      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();
                                }