使用“共享首选项”一次删除一个标记

时间:2017-05-07 10:36:16

标签: android google-maps sharedpreferences markers

我已经实现了一个自定义地图,允许用户使用长按钮将标记添加到共享首选项,最后我让它工作。在我的地图上,我有一个按钮,可以调用方法" Clear Marker"当按下按钮时,我需要退出地图并重新打开它以进行更改。我希望地图能够立即更新,还有一种方法可以删除添加到共享首选项的最后一项吗? IE清除前一个标记,而不是每个标记都添加。用于存储标记的代码是

 @Override
public void onMapLongClick(LatLng latLng) {
    addressEditText = (EditText) findViewById(R.id.editTextAddMarker);
    title12 = addressEditText.getText().toString();

    if (title12.length() > 2) {
        MarkerOptions markerOpt1 = new MarkerOptions()
                .title(title12)
                .anchor(0.5f, 0.5f);
        markerOpt1.position(latLng);

        mMap.addMarker(markerOpt1);
        Toast.makeText(this, "Marker Added", Toast.LENGTH_LONG).show();


        locationCount++;

        /** Opening the editor object to write data to sharedPreferences */
        SharedPreferences.Editor editor = sharedPreferences.edit();

        // Storing the latitude for the i-th location
        editor.putString("lat" + Integer.toString((locationCount - 1)), Double.toString(latLng.latitude));

        // Storing the longitude for the i-th location
        editor.putString("lng" + Integer.toString((locationCount - 1)), Double.toString(latLng.longitude));
        //editor.putString("title", addressEditText.getText().toString());
        editor.putString("title" + (locationCount-1), addressEditText.getText().toString());


        // Storing the count of locations or marker count
        editor.putInt("locationCount", locationCount);

        /** Saving the values stored in the shared preferences */
        editor.commit();

    } else if (title12.length() < 1) {
        Toast.makeText(this, "Enter title at the top left.", Toast.LENGTH_LONG).show();
    }
}

然后我从共享首选项中检索数据并将其绘制到我的onMapReady()

中的地图上
    // Opening the sharedPreferences object
    sharedPreferences = getSharedPreferences("location", 0);

    // Getting number of locations already stored
    locationCount = sharedPreferences.getInt("locationCount", 0);


    // If locations are already saved
    if (locationCount != 0) {

        String lat = "";
        String lng = "";
        String title13 = "";

        // Iterating through all the locations stored
        for (int i = 0; i < locationCount; i++) {

            // Getting the latitude of the i-th location
            lat = sharedPreferences.getString("lat" + i, "0");

            // Getting the longitude of the i-th location
            lng = sharedPreferences.getString("lng" + i, "0");

            SharedPreferences myPrefs = PreferenceManager.getDefaultSharedPreferences(this);
             title13 =  sharedPreferences.getString("title" + i, "0");


            //Toast.makeText(this, lat + "," + lng, Toast.LENGTH_LONG).show();

            double lat3 = Double.valueOf(lat).doubleValue();
            double lng3 = Double.valueOf(lng).doubleValue();

            position1 = new LatLng(lat3, lng3);
            drawMarker(position1,title13);
        }

    }

最后用于删除标记的代码(问题在这里)按下按钮后标记不会从地图中删除,只有当用户按下按钮离开并返回到地图时。它还清除共享首选项,有谁知道我怎么可以删除最后添加的项目?

    private void clearMarker() {
    // Opening the editor object to delete data from sharedPreferences
    SharedPreferences.Editor editor = sharedPreferences.edit();

    // Clearing the editor
    editor.clear();

    // Committing the changes
    editor.commit();
}

}

上面用&#34; onClick&#34;通过按钮。有谁知道如何做到这一点?所有帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

addMarker的方法签名是:

public final Marker addMarker (MarkerOptions options)

它返回在地图上创建的Marker对象。

在您的情况下,请替换

mMap.addMarker(markerOpt1);

Marker marker = mMap.addMarker(markerOpt1);

然后,您可以将此Marker对象存储在SharedPreferences中,而不是存储纬度和经度。请查看this答案以获取相关说明。

这使您可以从Marker.remove()方法中的Marker调用SharedPreferences对象上的clearMarker(),从地图中删除该特定标记。