SupportMapFragment - нельзя отбрасывать из фрагмента в MapFragment
Попытка собрать немного MapFragment в той активности, которую я создаю, но у меня есть проблемы с тем, чтобы все это работало. Я знаю, что сервисы Maps api и Play установлены правильно, так как я сделал тестовое учебное пособие, и все работает нормально.
Следуя документации здесь, я столкнулся с следующей проблемой: в моем методе setUpMapIfNeeded я могу использовать getFragmentManager()
или getSupportFragmentManager()
. Когда я использую getFragmentManager()
, Eclipse это классно, но когда я запускаю, я получаю NoSuchMethodError
, говорящий, что метод undefined. Когда я выбираю getSupportFragmentManager()
, Eclipse не нравится и дает мне ошибку "Can not cast from Fragment to MapFragment". Так что же сделка? Любые предложения?
private void setUpMapIfNeeded() {
//Do a null check to confirm that we have not already instantiated the map.
if (mMap == null) {
mMap = ((MapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
if (mMap != null) {
//do things to the map
mMap.addMarker(new MarkerOptions().position(LOCATION).title(EXTRA_URL));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(LOCATION,15));
mMap.getUiSettings().setZoomControlsEnabled(false);
}
}
}
Сообщите мне, есть ли какой-либо другой код, который я могу предоставить, и я буду рад быстро его опубликовать.
Ответы
Ответ 1
Я могу либо использовать getFragmentManager(), либо getSupportFragmentManager().
Здесь не должно быть дебатов. Если для вас доступно getSupportFragmentManager()
, то вы используете backport фрагментов поддержки Android Support, и это метод, который вы должны использовать.
Когда я выбираю getSupportFragmentManager(), Eclipse не нравится и дает мне ошибку "Can not cast from Fragment to MapFragment".
Это потому, что вы не должны использовать MapFragment
. Вы используете backport фрагментов поддержки Android Support, и поэтому вы должны использовать SupportMapFragment
.
Ответ 2
Это то, что я должен был сделать, потому что я работал под уровнем 11;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import android.support.v4.app.FragmentActivity;
public class MapaActivity extends FragmentActivity {
private GoogleMap map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mapa);
map = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapa)).getMap();
}
}
Ответ 3
Просто добавьте v4 jar в свою папку libs и добавьте в сборку
то на странице "Фрагмент" просто импортируйте
import android.support.v4.app.FragmentActivity;
вы можете расширить FragmentActivity
Открытый класс MainActivity extends FragmentActivity реализует LocationListener {
}
а также получить доступ к getSupportFragmentManager();
SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager(). findFragmentById (R.id.map);