Как я могу иметь разные события для одного и того же CustomInfoWindow - PullRequest
1 голос
/ 28 февраля 2020

Так что я знаю, что мой вопрос немного странный, но я объясню, что я имею в виду: у меня есть customInfoWindow и около 20 маркеров. Я успешно добавил слушателя onclick с 0 ошибками. Дело в том, что мне нравится каким-то образом, чтобы этот слушатель был для одного маркера custominfwindow, а для другого маркера custominfowindow - другое событие. Например, если вы нажмете на custominfowindow на сиднее, на нем отобразится тост, а если вы нажмете на custominfowindow в Индии, откроется макет. Что я думаю, я могу сделать, это сделать список onclick локальным, чтобы код не применялся нигде из Сиднея , Я не знаю, как добавить код для него. Может кто-нибудь, пожалуйста, помогите мне с этим вопросом. Я новичок в этом программировании, поэтому я не очень хорошо понимаю четверть вещей, поэтому, пожалуйста, помогите мне с этим. На всякий случай код для onclick listner в MapsActivity:

import androidx.fragment.app.FragmentActivity;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.text.method.LinkMovementMethod;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptor;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import java.util.Map;
//Class starts;

public class MapsActivity extends FragmentActivity implements GoogleMap.OnInfoWindowClickListener,OnMapReadyCallback {

    private GoogleMap mMap;


    @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) {
        mMap = googleMap;
        mMap.setOnInfoWindowClickListener(this);
@Override
    public void onInfoWindowClick(Marker marker) {
        openIndia();
    }
 public void openIndia(){
        Intent intent = new Intent(this,India.class);
        startActivity(intent);
 }
}

Кроме того, мой код намного длиннее, но чтобы спасти человека, который отвечает, и мое время, я дал только код, который должен быть изменен или полезен. Кроме этого, я не думаю, что больше нужен код. На всякий случай, если это необходимо, пожалуйста, сообщите мне.

1 Ответ

0 голосов
/ 28 февраля 2020

Один из способов сделать это - пометить маркер:

Marker indiaMarker = mMap.addMarker(new MarkerOptions().position(....).title("India").snippet());
indiaMarker.setTag("India"); // the tag could be anything, an id maybe ?

Marker sydneyMarker = mMap.addMarker(new MarkerOptions().position(....).title("Sydney").snippet());
sydneyMarker.setTag("Sydney");

...

public void onInfoWindowClick(Marker marker) {

        if("India".equals(marker.getTag())) {
            Intent intent = new Intent(this,India.class);
            startActivity(intent);
        } else if("Sydney".equals(marker.getTag())) {
            // showToast() or whatever you want to   
        }
    }

Соответствующая документация здесь :

publi c void setTag (тег объекта) Устанавливает тег для маркера. Вы можете использовать это свойство, чтобы связать произвольный Объект с этим маркером. Например, Объект может содержать данные о том, что представляет маркер

...