Reputation: 61
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);
}
}
Upvotes: 3
Views: 116
Reputation: 61
"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();
}
Upvotes: 1