2016-04-06 36 views
0

Uygulamamda konumumun program aracılığıyla elde edilmesi için bir düğme var. Her şey konum belirten bir kez ekledim, yeni bir işaretleyici eklendiğini anladım kadar her şey iyi gitti. Bu nedenle, bence görüşüme göre mantığa uygun ama istediğim gibi çalışmayan bir ifade ekledim. Konumu ilk aldığımda her şey iyi ve bir işaretçi yerleştirilir. Konum düğmesine ikinci kez basdığımda, işaret silinir ve yeni işaret eklenmez. Uygulama benim telefonumda sorun yok derler. Neyi yanlış yapıyorum?Konum için konum belirlenirken konum belirleyici kayboluyor Android Studio

public void showCurrentLocation(MenuItem item) { 
    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     // TODO: Consider calling 
     // ActivityCompat#requestPermissions 
     // here to request the missing permissions, and then overriding 
     // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
     //           int[] grantResults) 
     // to handle the case where the user grants the permission. See the documentation 
     // for ActivityCompat#requestPermissions for more details. 
     return; 
    } 
    Location currentLocation = LocationServices.FusedLocationApi 
      .getLastLocation(mGoogleApiClient); 
    if (currentLocation == null){ 

     LayoutInflater inflater = getLayoutInflater(); 
     View layout = inflater.inflate(R.layout.toast_gps_view, null); 

     Toast toast = new Toast(getApplicationContext()); 
     toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
     toast.setDuration(Toast.LENGTH_LONG); 
     toast.setView(layout); 
     toast.show(); 


     Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
     startActivity(intent); 


    } else { 
     LatLng latLng = new LatLng(
       currentLocation.getLatitude(), 
       currentLocation.getLongitude() 
     ); 


     CameraUpdate update = CameraUpdateFactory.newLatLngZoom(latLng, 16); 
     mMap.animateCamera(update); 


     if (myPosition != null){ 
      myPosition.remove(); 
     } else { 
      myPosition = mMap.addMarker(new MarkerOptions() 
        .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_location_icon)) 
        .position(latLng) 
        .title("I'm here!")); 

     } 

    } 

} 
+0

myPosition değişken nedir; yapımcısı olduğunu düşünüyorum; Bulunduğunuz yer her seferinde işaretleyiciyi kaldırın; ve dolayısıyla önceki işaretçi gitti; mutlu kodlama :) – DJphy

+0

Evet myPosition bir işaretleyicidir, ancak gördüğüm gibi, yöntem her çağrıldığında myPosition işaretçisinin orada olup olmadığını kontrol etmeli, sonra onu kaldırmalı ve yoksa yeni bir myPosition işaretçisi eklemelidir. Bunun sizin için bir şekilde açık olduğunu anlıyorum ama benim için değil :-) –

cevap

1

Marker zaten var olduğunda haritadan Marker kaldırıyorsunuz ama yeniden eklemeyi değildir.

Haritadan bir işaretçiyi kaldırdığınızda, null değil, durumunun tanımsız olduğunu unutmayın.

Marker var zaman Marker 'ın pozisyonunu güncellemek için if değiştirin

:

if (myPosition != null){ 
    myPosition.setPosition(latLng); 
} else { 
    myPosition = mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_location_icon)) 
      .position(latLng) 
      .title("I'm here!")); 
} 
+0

Teşekkürler, işe yaradı :-) –