Android谷歌地图V2 - OnInfoWindow点击几个标记

use*_*908 5 maps android

当你点击infowindow时,我有一个代码让一个标记启动一个活动.它工作得非常好.但是当我尝试添加另一个标记和另一个@override时,它总是在所有Markers infowindows上打开最后一个类.因此,实质上所有标记infowindows在单击时打开相同的活动,而不是打开我打算使用的单独类.

这是下面的代码,它在InfoWindowClicked上成功打开了1个活动.我把它叫做example.class,这适用于需要这个例子的每个人.

 public class MainActivity extends Activity implements OnInfoWindowClickListener {

 private GoogleMap googlemap;


 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);

if(isGooglePlay()){
setContentView(R.layout.activity_main);
setUpMap();

{    }    }


googlemap.addMarker(new MarkerOptions()
.position(new LatLng(0,-0))
.title("Title")
.snippet("Snippet")    
.icon(BitmapDescriptorFactory.fromResource(R.drawable.star)));
googlemap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

@Override
public void onInfoWindowClick(Marker marker) {
 Intent intent = new Intent(MainActivity.this,Example.class);
 startActivity(intent);
          } });
{
Run Code Online (Sandbox Code Playgroud)

因此,在谷歌地图googlemap/mMap(或你称之为你的任何东西)和@override void Oncreate(我的应用程序仅在GooglePlayServices可用时启动,你的应用程序可能不是这样)下面你可以放置标记和infowindowclick代码.

确保代码中的某处还有(通常在私有的void setUpMap(){)

    googlemap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
Run Code Online (Sandbox Code Playgroud)

现在下面是带有两个标记的代码,但是当它们被单击时它们都会打开example2.class.有人可以帮我解决这个问题,所以我可以将它们分开并让它们打开不同的类吗?

 googlemap.addMarker(new MarkerOptions()
.position(new LatLng(0,-0))
.title("Title")
.snippet("Snippet")    
.icon(BitmapDescriptorFactory.fromResource(R.drawable.star)));
googlemap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

@Override
public void onInfoWindowClick(Marker marker) {
 Intent intent = new Intent(MainActivity.this,Example.class);
 startActivity(intent);
          } });
{

      {
googlemap.addMarker(new MarkerOptions()
.position(new LatLng(  0, -0))
.title("Title")
.snippet("Snippet")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.star)));
googlemap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {


@Override
public void onInfoWindowClick(Marker marker) {
Intent intent = new Intent(MainActivity.this,Example2.class);
startActivity(intent);
        }  });
}}


}
Run Code Online (Sandbox Code Playgroud)

编辑(07/06/2013):

private GoogleMap googlemap; 
private Map<Marker, Class> allMarkersMap = new HashMap<Marker, Class>();
Run Code Online (Sandbox Code Playgroud)

以上是在班级^^^

 Marker marker1 = googlemap.addMarker(new MarkerOptions()
.position(new LatLng(0,0))
.title("England")
.snippet("London")    
.icon(BitmapDescriptorFactory.fromResource(R.drawable.star)));
allMarkersMap.put(marker1, Contact.class);

}

public void onInfoWindowClick(Marker marker) {
Class cls = allMarkersMap.get(marker);
Intent intent = new Intent(MainActivity.this, cls);
startActivity(intent);

}
Run Code Online (Sandbox Code Playgroud)

上面的^^^^在我的"protected void onCreate(Bundle savedInstanceState){"之下.没有错误,当我调试时我可以看到Marker但无法点击InfoWindow.警告是:

Class is a raw type. References to generic type Class<T> should be parameterized    
Run Code Online (Sandbox Code Playgroud)

我在类级别上看到了这个警告两次,并且在公共虚空中看到了一次onInfoWindow上的单词'Class'.我试着像"添加类型参数的'类’一些不同的东西,但它没有努力.标记标记在公共无效我改变的标记,以标记1和线下allMarkersMap.get(标记);(标记)(marker1) 只是为了尝试,但它没有用.还有什么我可以做的尝试初始化onInfoWindowClick函数?

use*_*908 8

从MaciejGórski的帮助中,当您在GoogleMapsV2上单击单独的Marker infowindows时,可以打开不同类(活动,例如页面)的示例:

将此添加到您的GoogleMap课程级别:

private GoogleMap googlemap/mMap (or whatever you call yours); 
private Map<Marker, Class> allMarkersMap = new HashMap<Marker, Class>();
Run Code Online (Sandbox Code Playgroud)

在protected void onCreate(Bundle savedInstanceState)下面{super.onCreate(savedInstanceState); 放入你的标记:

    Marker marker = googlemap.addMarker(new MarkerOptions()
    .position(new LatLng(0,-0))
    .title("London")
    .snippet("North London")    
    .icon(BitmapDescriptorFactory.fromResource(R.drawable.star)));
    allMarkersMap.put(marker, NorthLondon.class);
    googlemap.setOnInfoWindowClickListener(this);



    Marker marker1 = googlemap.addMarker(new MarkerOptions()
    .position(new LatLng(0244534,-1232312))
    .title("USA")
    .snippet("Washington")    
    .icon(BitmapDescriptorFactory.fromResource(R.drawable.star)));
    allMarkersMap.put(marker1, Washington.class);
    googlemap.setOnInfoWindowClickListener(this);


    Marker marker2 = googlemap.addMarker(new MarkerOptions()
    .position(new LatLng(42343244,-0.334322))
    .title("Italy")
    .snippet("Rome"));
    allMarkersMap.put(marker2, Rome.class);
    googlemap.setOnInfoWindowClickListener(this);

    }

    public void onInfoWindowClick(Marker marker) {
    Class cls = allMarkersMap.get(marker);
    Intent intent = new Intent(MainActivity.this, cls);
    startActivity(intent);

}
Run Code Online (Sandbox Code Playgroud)

以上是单独的标记.如果我要创建另一个,我会称之为Marker marker3,然后是4,5等...它在allMarkersMap.put(marker,.class)中要求.class; 输入你想要的课程,这样就可以打开你想要的课程.公共无效的OnInfoWindowClick代码下面的标记代码,这是回调.

就是这样.当您在标记中单击InfoWindows时,他们应该打开您在MarkerOptions代码中放置的活动类!

信用此去MaciejGórski

  • 您无需调用googlemap.setOnInfoWindowClickListener(this); 多次. (2认同)