Как щелкнуть маркер из нескольких маркеров на карте, а затем go к действию с информацией о маркерах - PullRequest
0 голосов
/ 27 марта 2020

Я хочу создать несколько маркеров на карте, каждый маркер будет иметь такую ​​информацию, как местоположение, адрес ..., и когда я нажму на маркер, появится другое действие и отобразит информацию о маркер, на который я нажал, и я написал несколько кодов, в результате получается, что для разных маркеров информация, передаваемая из маркеров в действие, одинакова, код выглядит следующим образом:

for (final MyMarkerData object: aaa) {
        m = googleMap.addMarker(new MarkerOptions()
                .position(object.getLatLng())
                .title(object.getTitle())
                .snippet(object.getSnippet()));
        googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker m) {
                Intent intent = new Intent(getActivity(), EventInfo.class);
                intent.putExtra("title", object.getTitle());
                startActivity(intent);
                return false;
            }
        });
      }

код в активность выглядит следующим образом:

Intent intent = getIntent();
    String a = intent.getStringExtra("title");
    TextView textview  =  findViewById(R.id.eventInfo);
    textview.setText(a);

когда я нажимаю три разных маркера, TextView показывает ту же информацию (на самом деле отличается), которая является последней информацией в ArrayList AAA, так что с этим не так?

1 Ответ

0 голосов
/ 27 марта 2020

googleMap используйте только 1 OnMarkerClickListener для каждого события, отмеченного маркером, так что вы устанавливаете его несколько раз, так как значение l oop бесполезно, последнее переопределит предыдущего слушателя. Вот почему зарегистрирован только последний слушатель.

Здесь необходимо выполнить два рефакторинга: - Вызовите setOnMarkerClickListener достаточно только 1 раза - Определите HashMap<Marker, object>, чтобы получить нужный объект из маркера, на который нажали

HashMap<Object, Marker> markerMap = new HashMap<Object, Marker>();

googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
    @Override
    public boolean onMarkerClick(Marker m) {
        Object obj = markerMap.get(m);

        // Use obj for correct data object
    }
});

for (final MyMarkerData object: aaa) {
    marker = googleMap.addMarker(new MarkerOptions()
            .position(object.getLatLng())
            .title(object.getTitle())
            .snippet(object.getSnippet()));

    markerMap.put(aaa, marker)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...