gpt4 book ai didi

Android Google Maps V2 - OnInfoWindowClick on several markers

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:15:55 33 4
gpt4 key购买 nike

我有代码可以让一个标记在您单击信息窗口时启动一项 Activity 。它工作得很好。但是当我尝试添加另一个标记和另一个 @override 时,它​​总是在所有标记信息窗口上打开最后一个类。因此,本质上,所有标记信息窗口在单击时都会打开相同的 Activity ,而不是打开我打算打开的单独的类。

下面的代码成功打开了 InfoWindowClicked 上的 1 个 Activity 。我将其命名为 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);
} });
{

因此在 GoogleMap googlemap/mMap(或任何您称呼的)和 @override void Oncreate 下(我的应用程序仅在 GooglePlayServices 可用时启动,您的应用程序可能不可用像这样)你可以把标记和 infowindowclick 代码。

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

    googlemap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();

下面是带有两个标记的代码,但它们都在单击时打开 example2.class。有人可以帮我解决这个问题,以便我可以将它们分开并让它们开设不同的类(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);
} });
}}


}

编辑 (07/06/2013):

private GoogleMap googlemap; 
private Map<Marker, Class> allMarkersMap = new HashMap<Marker, Class>();

以上是类(class)水平^^^

 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);

}

上面的^^^^在我的“protected void onCreate(Bundle savedInstanceState) {”下。没有错误,当我调试时我可以看到标记但无法单击信息窗口。警告是:

Class is a raw type. References to generic type Class<T> should be parameterized    

我在类里面两次看到此警告,一次在公共(public)空隙中 onInfoWindowClick 上的单词 'Class'。我尝试了一些不同的东西,比如“向‘Class’添加类型参数,但它没有用。在 public void 的 Marker 标记 上,我将 ma​​rker 更改为 < strong>ma​​rker1 和 allMarkersMap.get(marker); 下面的行将 (marker) 更改为 (marker1) 只是为了尝试但没有用。我还能做些什么来尝试初始化 onInfoWindowClick 函数吗?

最佳答案

在 MaciejGórski 的帮助下,这里是当您在 GoogleMapsV2 上单击单独的标记信息窗口时打开不同类( Activity ,例如页面)的示例:

将此添加到您的 GoogleMap 类级别:

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

下面是 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);

}

以上是单独的标记。如果我要创建另一个,我会称它为 Marker marker3,然后是 4,5 等等......它在 allMarkersMap.put(marker, .class); 中要求 .class 输入类想要,所以它打开你想要的东西。在标记下方的某处放置 public void OnInfoWindowClick 代码,这是回调。

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

感谢 MaciejGórski

关于Android Google Maps V2 - OnInfoWindowClick on several markers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16885401/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com