2017-12-22 6 views
0

Ich mache eine App, in der ich GoogleMaps verwende. Jetzt habe ich eine Frage über die Kommunikation zwischen MapActivity und ToursActivity.Um es zu vereinfachen, ist meine App über Band Metallica, und ich habe eine Liste von Tours. Wenn ein Nutzer auf einen der Touren klickt, sollte er eine neue Aktivität mit diesem Ort öffnen. Ich werde ToursActivity hier nicht einfügen, da es einen Haufen Code gibt, den Sie nicht benötigen. Außerdem behalte ich alle meine Daten auf Firebase, wenn das wichtig ist.Kommunikation zwischen zwei Aktivitäten?

Das ist mein MapActivity:

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

} 
} 
+1

Mit Intent und Bundle können Sie die neue Aktivität öffnen und Daten weiterleiten. [Überprüfen Sie diese Antwort hier] (https://stackoverflow.com/a/819427/4329778) –

+0

Mögliche Betrüger von https://stackoverflow.com/questions/21393287/how-should-i-communicate-between-activities – Zoe

Antwort

0

Sie Intent mit zusätzlichen Parameter verwenden können. Zum Beispiel auf ToursActivity.java

Intent intent = new Intent(ToursActivity.this, MapActivity.class); 
intent.putExtra("lat", latitude); 
intent.putExtra("long", longitude); 
startActivity(intent); 

Dann können Sie diese Parameter auf onCreate() -Methode von MapActivity.java erhalten erhalten:

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

Danke für eine schnelle Antwort. – JoelTRowe

0

Sie Absicht mit zusätzlichen Parameter verwenden können.

Intent intent = new Intent(ToursActivity.this, MapActivity.class); 
intent.putExtra("latitude", latitude); 
intent.putExtra("longitude", longitude); 
startActivity(intent); 

Dann können Sie Ihre Werte in OnCreate() -Methode von MapActivity erhalten.

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

Danke für die schnelle Antwort, aber ich habe noch eine Frage. Wenn ich Parameter Breite und Länge schreibe, werden sie rot, weil diese Parameter von MapActivity sind. Jetzt, in meinem ToursFragment (nicht ToursActivity, mein Fehler) ist eine Methode onItemClick, in der ich intent will, und wenn Sie darauf klicken, es sollte eine neue Aktivität mit einer Karte öffnen – JoelTRowe

+0

Kannst du den onItemClick-Code setzen, damit ich sehen kann, was du meinst? –

+0

@OnItemClick (R.id.lvTours) public void onItemClick (Ansicht v, int position) { Absicht intent = neue Absicht (v.getContext(), MapActivity.class); intent.putExtra ("Breitengrad", lat); intent.putExtra ("Länge", lng); startActivity (Absicht); } } – JoelTRowe

Verwandte Themen