当你点击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函数?
从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
| 归档时间: |
|
| 查看次数: |
10533 次 |
| 最近记录: |