SupportMapFragment - нельзя отбрасывать из фрагмента в MapFragment - программирование
Подтвердить что ты не робот

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

Сообщите мне, есть ли какой-либо другой код, который я могу предоставить, и я буду рад быстро его опубликовать.

4b9b3361

Ответ 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);