#android #google-maps
#Android #google-карты
Вопрос:
Я реализовал способ поиска места в строке поиска, и приложение отображает маркер абсолютно нормально. Но после того, как я нажимаю на отображаемый маркер, всплывающие сообщения не появляются. Кто-нибудь может показать мне, как реализовать то же самое. Вот код, который я использовал, но я просто не могу получить широту и долготу при нажатии на маркер.
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import java.io.IOException;
import java.util.List;
public class SearchMaps extends FragmentActivity implements OnMapReadyCallback,GoogleMap.OnMarkerClickListener {
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
public void onSearch(View view) {
EditText location_tf = (EditText) findViewById(R.id.TSearch);
String location = location_tf.getText().toString();
List<Address> addressList = null;
if (location != null || !location.equals("")) {
Geocoder geocoder = new Geocoder(this);
try {
addressList = geocoder.getFromLocationName(location, 1);
} catch (IOException e) {
e.printStackTrace();
}
android.location.Address address = addressList.get(0);
LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude());
mMap.clear();
mMap.addMarker(new MarkerOptions().position(latLng).title("Marker")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
}
@Override
public boolean onMarkerClick(Marker marker) {
LatLng position = marker.getPosition();
Toast.makeText(
SearchMaps.this,
"Lat " position.latitude " " "Long " position.longitude,Toast.LENGTH_LONG).show();
return false;
}
}
Ответ №1:
Просто добавьте mMap.setOnMarkerClickListener(this);
в конце вашего onMapReady
метода.
Ответ №2:
Вы пробовали сначала использовать Log.d? Поскольку Toast нужен контекст, и иногда вам нужно прикрепить Toast
к пользовательскому интерфейсу с помощью runOnUIThread