【问题标题】:Add second marker on google maps activity in android on user input在用户输入的android中的谷歌地图活动上添加第二个标记
【发布时间】:2025-12-22 18:10:11
【问题描述】:

我有一个带有地图、编辑文本和按钮的谷歌地图活动。

The screenshot of the activity that I have ready at the moment.

只要打开此活动,就会在地图中添加一个标记。

我想要进一步说明的是,每当用户在该编辑文本中输入地址并单击按钮时,都会在同一个地图上添加另一个标记,而不会删除前一个标记,并在地图中创建一条连接这两个标记的折线标记。

我尝试添加第二个标记,但应用程序崩溃了,我无法做到。如果你们能帮我添加第二个标记,那将是一个很大的帮助。

这是活动代码:

    public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    private EditText findRouteEdittext;
    private Button findRouteButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

    }

    @Override
    public void onMapReady(GoogleMap googleMap) {

        Intent intent = getIntent();
        Geocoder coder = new Geocoder(this);
        List<Address> addressList;
        LatLng coord = null;

        String completeAddress = intent.getStringExtra("completeAddress");

        try {
            addressList = coder.getFromLocationName(completeAddress, 5);
            if (addressList != null) {

                Address location = addressList.get(0);

                coord = new LatLng(location.getLatitude(), location.getLongitude());
            }

        } catch (Exception ex) {

            ex.printStackTrace();
        }

        mMap = googleMap;

        MarkerOptions mMarkerOptions = new MarkerOptions();
        mMarkerOptions.position(coord);
        mMarkerOptions.title(completeAddress);
        mMap.addMarker(mMarkerOptions).showInfoWindow();
        mMap.moveCamera(CameraUpdateFactory.newLatLng(coord));
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(coord, 14.0f));
    }
}

编辑 1


我自己终于得到了答案,关于在哪里添加,这基本上是一个小错误,但只是为了让其他人知道在哪里添加我会在这里更新答案:

public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback {

        private GoogleMap mMap;
        private EditText findRouteEdittext;
        private Button findRouteButton;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_maps);
            // Obtain the SupportMapFragment and get notified when the map is ready to be used.
            SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map);
            mapFragment.getMapAsync(this);

          findRouteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                searchString = findRouteEdittext.getText().toString().toLowerCase().trim();


                if (searchString.equals("")){
//                    findRouteEditTextInputLayout.setErrorEnabled(true);
//                    findRouteEditTextInputLayout.setError("Enter a location or City!");
                    //use snackbar to show something.

                }
                else{

                    coder2 = new Geocoder(MapsActivity.this);
                    coord2 = null;

                    try {
                        addressList2 = coder2.getFromLocationName(searchString, 5);
                        if (addressList2 != null) {

                            Address location = addressList2.get(0);

                            coord2 = new LatLng(location.getLatitude(), location.getLongitude());
                        }

                    } catch (Exception ex) {

                        ex.printStackTrace();
                    }


                    if (coord2!=null && coord!=null) {
                        mMap.clear();
                        mMarkerOptions2 = new MarkerOptions();
                        mMarkerOptions2.position(coord2);
                        mMarkerOptions2.title(searchString); //this is the address of the new string entered by the user
                        mMap.addMarker(mMarkerOptions2).showInfoWindow();

                        mMarkerOptions3 = new MarkerOptions();
                        mMarkerOptions3.position(coord);
                        mMarkerOptions3.title(completeAddress); //this is the address of the original string received from intent
                        mMap.addMarker(mMarkerOptions3).showInfoWindow();
                    }
               }

        }

        @Override
        public void onMapReady(GoogleMap googleMap) {

            Intent intent = getIntent();
            Geocoder coder = new Geocoder(this);
            List<Address> addressList;
            LatLng coord = null;

            String completeAddress = intent.getStringExtra("completeAddress");

            try {
                addressList = coder.getFromLocationName(completeAddress, 5);
                if (addressList != null) {

                    Address location = addressList.get(0);

                    coord = new LatLng(location.getLatitude(), location.getLongitude());
                }

            } catch (Exception ex) {

                ex.printStackTrace();
            }

            mMap = googleMap;

            MarkerOptions mMarkerOptions = new MarkerOptions();
            mMarkerOptions.position(coord);
            mMarkerOptions.title(completeAddress);
            mMap.addMarker(mMarkerOptions).showInfoWindow();
            mMap.moveCamera(CameraUpdateFactory.newLatLng(coord));
            mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(coord, 14.0f));
        }
    }

【问题讨论】:

  • 你没有提到 findRouteButton 的 onclick 监听器。
  • 我删除了所有不适合我的代码,如果你愿意,我可以重写我所做的并展示给你。但它只是没有用,所以我发布了对我来说非常有效的内容,并删除了所有无效的内容。

标签: android google-maps google-maps-android-api-2


【解决方案1】:

如果您已经获得 Location 对象,请使用以下代码将新标记添加到地图中。

latitude = location.getLatitude();
longitude = location.getLongitude();
LatLng latLng = new LatLng(latitude, longitude);
googleMap.addMarker(new MarkerOptions().position(latLng));

将此代码放在单击侦听器的侧面添加按钮中。

【讨论】:

  • 我已经想通了,兄弟,有一个小错误,但我不是在问“如何”我是在问“在哪里”添加代码,因为我在添加其中任何一个时遇到了问题,但是我想这只是由于那个错误。无论如何,感谢您的宝贵时间。
  • 很高兴为您提供帮助。