2017-12-22 3 views
0

나는 GoogleMaps를 사용하는 앱을 만들고 있습니다. 이제 MapActivity와 ToursActivity 간의 통신에 대해 질문이 있습니다. 간단하게하기 위해 내 앱은 Metallica 밴드에 관한 것이고 Tours 목록이 있습니다. 사용자가 둘러보기 중 하나를 클릭하면 해당 위치로 새 활동을 열어야합니다. 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); 

} 
} 
+1

의도 및 번들을 사용하여 새 활동을 열고 데이터를 전달할 수 있습니다. [이 대답을 확인하십시오] (https://stackoverflow.com/a/819427/4329778) –

+0

가능한 속담 https://stackoverflow.com/questions/21393287/how-should-i-communicate-between-activities – Zoe

답변

0

당신은 추가 매개 변수와 의도를 사용할 수 있습니다

내 MapActivity입니다. 예를 들어 , 그럼 당신은에서 onCreate에 이러한 매개 변수 MapActivity.java의 get() 메소드를 얻을 수
Intent intent = new Intent(ToursActivity.this, MapActivity.class); 
intent.putExtra("lat", latitude); 
intent.putExtra("long", longitude); 
startActivity(intent); 

ToursActivity.java

에 :

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

감사합니다. 빠른 답변을 위해. – JoelTRowe

0

당신은 추가 매개 변수와 의도를 사용할 수 있습니다.

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"); 
+0

빠른 답변을 주셔서 감사합니다.하지만 질문이 하나 더 있습니다. 위도와 경도 매개 변수를 쓸 때 그 매개 변수는 MapActivity에서 오는 빨강으로 표시됩니다. 내 ToursFragment (ToursActivity가 아니라 내 실수)는 onItemClick이라는 메소드이고 Intent를 클릭하면 클릭하면됩니다. 지도로 새로운 활동을 열어야합니다. – JoelTRowe

+0

무슨 의미인지 알 수 있도록 onItemClick 코드를 추가 할 수 있습니까? –

+0

@OnItemClick (R.id.lvTours) public void onItemClick (보기 v, int 위치) { 의도 의도 = 새 의도 (v.getContext(), MapActivity.class); intent.putExtra ("latitude", lat); intent.putExtra ("longitude", lng); startActivity (intent); } – JoelTRowe

관련 문제