Android 两个活动之间的沟通?

Android 两个活动之间的沟通?,android,android-intent,android-maps,Android,Android Intent,Android Maps,我正在制作一个应用程序,其中我正在使用谷歌地图。现在,我有一个关于MapActivity和ToursActivity之间通信的问题。为了简化它,我的应用程序是关于band Metallica的,我有一个旅游列表。当用户单击其中一个巡演时,它应该在该位置打开一个新的活动。我不会把ToursActivity放在这里,因为这里有一堆你不需要的代码。而且,如果这很重要的话,我会把我所有的数据都保存在Firebase上 这是我的地图活动: public class MapActivity extends

我正在制作一个应用程序,其中我正在使用谷歌地图。现在,我有一个关于MapActivity和ToursActivity之间通信的问题。为了简化它,我的应用程序是关于band Metallica的,我有一个旅游列表。当用户单击其中一个巡演时,它应该在该位置打开一个新的活动。我不会把ToursActivity放在这里,因为这里有一堆你不需要的代码。而且,如果这很重要的话,我会把我所有的数据都保存在Firebase上

这是我的地图活动:

public class MapActivity extends AppCompatActivity implements OnMapReadyCallback {



private static final int REQUEST_LOCATION_PERMISSION = 10;
private GoogleMap.OnMapClickListener mCustomOnMapClickListener;

private GoogleMap mGoogleMap;
private MapFragment mMapFragment;
@BindView(R.id.lvTours) ListView lvTours;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tours_coord);
    this.initialize();

    lvTours.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        }
    });
}


public void initialize(){
    this.mMapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.fGoogleMap);
    this.mMapFragment.getMapAsync(this);
    this.mCustomOnMapClickListener = new GoogleMap.OnMapClickListener() {
        @Override
        public void onMapClick(LatLng latLng) {
            MarkerOptions newMarkerOptions = new MarkerOptions();
            newMarkerOptions.icon(BitmapDescriptorFactory.fromResource(R.mipmap.tour));
            newMarkerOptions.title("Tour");
            newMarkerOptions.snippet("It' was here!");
            newMarkerOptions.position(latLng);
            mGoogleMap.addMarker(newMarkerOptions);
        }
    };
}


@Override
public void onMapReady(GoogleMap googleMap) {
    this.mGoogleMap = googleMap;
    UiSettings uiSettings = this.mGoogleMap.getUiSettings();
    uiSettings.setZoomControlsEnabled(true);
    uiSettings.setMyLocationButtonEnabled(true);
    uiSettings.setZoomGesturesEnabled(true);
    this.mGoogleMap.setOnMapClickListener(this.mCustomOnMapClickListener);
   goToLocation(33.835293 , -117.914505);
}


public void goToLocation(double lat, double lng){

    LatLng latLng = new LatLng(lat, lng);


    CameraPosition position = CameraPosition.builder()
            .target(latLng)
            .zoom(16f)
            .bearing(0.0f)
            .tilt(0.0f)
            .build();

    mGoogleMap.animateCamera(CameraUpdateFactory.newCameraPosition(position),null);
}




private boolean hasLocationPermission() {

    String LocationPermission = android.Manifest.permission.ACCESS_FINE_LOCATION;
    int status = ContextCompat.checkSelfPermission(this, LocationPermission);
    if (status == PackageManager.PERMISSION_GRANTED) {

        this.mGoogleMap.setMyLocationEnabled(true);

        return true;

    }
    return false;
}

private void requestPermission() {
    String[] permission = new String[]{Manifest.permission.ACCESS_FINE_LOCATION};
    ActivityCompat.requestPermissions(MapActivity.this, permission, REQUEST_LOCATION_PERMISSION);

}
}
公共类MapActivity扩展了AppCompatActivity在MapReadyCallback上的实现{
私有静态最终整数请求\位置\权限=10;
私有GoogleMap.OnMapClickListener mcustomamAppClickListener;
私有谷歌地图mGoogleMap;
私人地图碎片;
@BindView(R.id.lvTours)ListView lvTours;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.tours_coord);
这是初始化();
lvTours.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
}
});
}
公共无效初始化(){
this.mMapFragment=(MapFragment)getFragmentManager().findFragmentById(R.id.fGoogleMap);
this.mMapFragment.getMapAsync(this);
this.mcustomamapclicklistener=new GoogleMap.OnMapClickListener(){
@凌驾
公共无效的点击(LatLng LatLng){
MarkerOptions newMarkerOptions=新MarkerOptions();
图标(BitmapDescriptorFactory.fromResource(R.mipmap.tour));
newMarkerOptions.title(“巡演”);
newMarkerOptions.snippet(“它就在这里!”);
新标记选项位置(车床);
mGoogleMap.addMarker(newMarkerOptions);
}
};
}
@凌驾
4月1日公开作废(谷歌地图谷歌地图){
this.mGoogleMap=谷歌地图;
UiSettings UiSettings=this.mGoogleMap.getUiSettings();
uiSettings.setZoomControlsEnabled(true);
uiSettings.setMyLocationButtonEnabled(真);
uiSettings.setZoomGeturesEnabled(true);
this.mGoogleMap.setOnMapClickListener(this.mcustomanMapClickListener);
goToLocation(33.835293,-117.914505);
}
公共空间定位(双lat、双lng){
LatLng LatLng=新LatLng(lat,lng);
CameraPosition位置=CameraPosition.builder()
.目标(latLng)
.zoom(16f)
.轴承(0.0f)
.倾斜(0.0f)
.build();
mGoogleMap.animateCamera(CameraUpdateFactory.newCameraPosition(position),null);
}
私有布尔hasLocationPermission(){
String LocationPermission=android.Manifest.permission.ACCESS\u FINE\u位置;
int status=ContextCompat.checkSelfPermission(这是LocationPermission);
如果(状态==已授予PackageManager.PERMISSION){
this.mGoogleMap.setMyLocationEnabled(true);
返回true;
}
返回false;
}
私有void requestPermission(){
字符串[]权限=新字符串[]{Manifest.permission.ACCESS\u FINE\u LOCATION};
ActivityCompat.requestPermissions(MapActivity.this、权限、请求位置权限);
}
}

您可以将Intent与其他参数一起使用。 例如,在ToursActivity.java上

Intent intent = new Intent(ToursActivity.this, MapActivity.class);
intent.putExtra("lat", latitude);
intent.putExtra("long", longitude);
startActivity(intent);
然后您可以在MapActivity.java的onCreate()方法上获得以下参数:

Intent intent = getIntent();
long latitude = intent.getLongExtra("lat", 0);
long longitutde = intent.getLongExtra("long", 0);

可以将intent与其他参数一起使用

Intent intent = new Intent(ToursActivity.this, MapActivity.class);
intent.putExtra("latitude", latitude);
intent.putExtra("longitude", longitude);
startActivity(intent);
然后可以在MapActivity的onCreate()方法中获取值

Intent intent = getIntent();
Bundle extras = intent.getExtras();
double latitude = intent.getDouble("latitude");
double longitude = intent.getDouble("longitude");

您可以使用Intent和Bundle打开新活动并传递数据。谢谢你的快速回答。谢谢你的快速回答,但我还有一个问题。当我写入参数纬度和经度时,它们会变红,因为这些参数来自MapActivity。现在,在我的ToursFragment(不是ToursActivity,我的错误)中有一个方法onItemClick,我想在其中输入Intent,当你点击它时,它应该用一个Map打开一个新的活动你能把onItemClick代码放进去让我明白你的意思吗?@onItemClick(R.id.lvTours)public void onItemClick(View v,int position){Intent Intent Intent=new Intent(v.getContext(),MapActivity.class);Intent.putExtra(“纬度”,lat);Intent.putExtra(“经度”,lng);startActivity(意图);}}}我不知道我是否正确理解了您的问题,但问题是这样的。在MapActivity中,当您获得意图时,可以随意命名参数。如果这不是您问题的答案,请澄清“红色”的含义这是在哪里发生的。我会尽量解释得更好。我有Firebase上的旅游列表。该列表包含下一个参数:坐标、标题、id和年份。我知道如何在片段中显示这些数据以及所有这些。但是,我做了你所说的(有意),问题是当我输入参数时(ToursFragment.this,MapActivitiy)这两个得到红色下划线,它说:无法解析构造函数。现在,另一个问题在第二行代码中。当我输入经度时,它变成红色。