如何在 Android Studio 中使用 onMarkerClick 打开一个新的 activity
How to open a new activity using onMarkerClick in Android Studio
我正在尝试在 Android Studio 中创建一个 Android 应用程序,它与 Google 地图 API 一起使用。我已经成功地将标记添加到地图上我选择的某个 LatLng 位置。
单击标记时,会弹出一个名为 "Testing" 的标题。但我想要的是,当用户点击标记标题时,它必须打开一个新的 activity。但是,我似乎无法让它工作。我添加了一个 onMarkerClick,但是我无法实现它。我真的很困惑。我试图添加回调方法但不确定如何添加。
你介意给我看正确的代码吗?谢谢您,非常感谢!
package com.msp.googlemapsproject;
import android.content.Intent;
import android.os.Bundle;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
public class MainActivity extends android.support.v4.app.FragmentActivity
implements GoogleMap.OnMarkerClickListener {
static final LatLng MyHome = new LatLng(-29.759933, 30.801030);
private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
googleMap.setOnMarkerClickListener(this);
try{
if (googleMap == null) {
googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
}
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googleMap.setMyLocationEnabled(true);
googleMap.setTrafficEnabled(true);
googleMap.setIndoorEnabled(true);
googleMap.setBuildingsEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
final Marker MyHome_display = googleMap.addMarker(new MarkerOptions().position(MyHome).title("Testing"));
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public boolean onMarkerClick(Marker marker) {
if (marker.equals(MyHome))
{
Intent intent = new Intent(MainActivity.this, LastScreen.class);
startActivity(intent);
}
return false;
}
}
试试这个
googleMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
Intent intent = new Intent(MainActivity.this, LastScreen.class);
startActivity(intent);
}
});
我认为你的问题是你的 if 条件,因为你正在测试一个标记和一个 LatLng,所以条件总是假的:
你可以试试
@Override
public boolean onMarkerClick(Marker marker) {
if (marker.getTitle().equals("Testing"))
{
Intent intent = new Intent(MainActivity.this, LastScreen.class);
startActivity(intent);
}
return false;
}
要在活动之间切换,请使用 Intent:
Intent intent = new Intent(MainActivity.this, LastScreen.class);
startActivity(intent);
记得在清单中声明activity,否则会抛出错误
$try like this:
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// Add a marker in Sydney and move the camera
LatLng chennai = new LatLng(12.9671, 80.2593);
mMap.addMarker(new MarkerOptions().position(chennai).title("Chennai"));
LatLng perungudi = new LatLng(12.97, 80.25);
mMap.addMarker(new MarkerOptions().position(perungudi).title("Perungudi"));
LatLng pallikarnai = new LatLng(12.9377, 80.2154);
mMap.addMarker(new MarkerOptions().position(pallikarnai).title("Pallikarnai"));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(chennai,12));
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
if (marker.getTitle().equals("Chennai")){
Toast.makeText(MapsActivity.this, "Clicked"+marker.getTitle(), Toast.LENGTH_SHORT).show();
}
return false;
}
});
}
我正在尝试在 Android Studio 中创建一个 Android 应用程序,它与 Google 地图 API 一起使用。我已经成功地将标记添加到地图上我选择的某个 LatLng 位置。
单击标记时,会弹出一个名为 "Testing" 的标题。但我想要的是,当用户点击标记标题时,它必须打开一个新的 activity。但是,我似乎无法让它工作。我添加了一个 onMarkerClick,但是我无法实现它。我真的很困惑。我试图添加回调方法但不确定如何添加。
你介意给我看正确的代码吗?谢谢您,非常感谢!
package com.msp.googlemapsproject;
import android.content.Intent;
import android.os.Bundle;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
public class MainActivity extends android.support.v4.app.FragmentActivity
implements GoogleMap.OnMarkerClickListener {
static final LatLng MyHome = new LatLng(-29.759933, 30.801030);
private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
googleMap.setOnMarkerClickListener(this);
try{
if (googleMap == null) {
googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
}
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googleMap.setMyLocationEnabled(true);
googleMap.setTrafficEnabled(true);
googleMap.setIndoorEnabled(true);
googleMap.setBuildingsEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
final Marker MyHome_display = googleMap.addMarker(new MarkerOptions().position(MyHome).title("Testing"));
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public boolean onMarkerClick(Marker marker) {
if (marker.equals(MyHome))
{
Intent intent = new Intent(MainActivity.this, LastScreen.class);
startActivity(intent);
}
return false;
}
}
试试这个
googleMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
Intent intent = new Intent(MainActivity.this, LastScreen.class);
startActivity(intent);
}
});
我认为你的问题是你的 if 条件,因为你正在测试一个标记和一个 LatLng,所以条件总是假的:
你可以试试
@Override
public boolean onMarkerClick(Marker marker) {
if (marker.getTitle().equals("Testing"))
{
Intent intent = new Intent(MainActivity.this, LastScreen.class);
startActivity(intent);
}
return false;
}
要在活动之间切换,请使用 Intent:
Intent intent = new Intent(MainActivity.this, LastScreen.class);
startActivity(intent);
记得在清单中声明activity,否则会抛出错误
$try like this:
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// Add a marker in Sydney and move the camera
LatLng chennai = new LatLng(12.9671, 80.2593);
mMap.addMarker(new MarkerOptions().position(chennai).title("Chennai"));
LatLng perungudi = new LatLng(12.97, 80.25);
mMap.addMarker(new MarkerOptions().position(perungudi).title("Perungudi"));
LatLng pallikarnai = new LatLng(12.9377, 80.2154);
mMap.addMarker(new MarkerOptions().position(pallikarnai).title("Pallikarnai"));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(chennai,12));
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
if (marker.getTitle().equals("Chennai")){
Toast.makeText(MapsActivity.this, "Clicked"+marker.getTitle(), Toast.LENGTH_SHORT).show();
}
return false;
}
});
}