Метод getSupportFragmentManager() не определен для типа MapFragment
Я пытаюсь реализовать отображение карты Google, и ниже приведены мои коды:
package com.fragments;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
public class MapFragment extends SherlockMapFragment {
private GoogleMap mMap;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = super.onCreateView(inflater, container, savedInstanceState);
SupportMapFragment mapFrag= (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.fragment_map);
mMap = mapFrag.getMap();
return root;
}
}
Я получаю сообщение об ошибке, что getSupportFragmentManager() не определен для типа MapFragment. Однако я немного запутался, так как импортировал com.google.android.gms.maps.SupportMapFragment. не должен ли тогда этот метод появиться? Я пропускаю некоторые шаги, чтобы заставить этот метод работать?
2 ответа
Если вы используете этот SherlockMapFragment, попробуйте:
getSherlockActivity().getSupportFragmentManager();
Чувак, я провел последние пару часов, читая этот и два других твоих вопроса (среди прочих), потому что у меня была точно такая же проблема. У меня было приложение, работающее с ABS+GMapsV2.0+FragmentActivity, но, поскольку я много слышал о том, что полезно иметь все это во фрагментах, я начал переносить его на фрагменты и FragmentActivities в качестве контейнеров.
Когда я портировал карту, все произошло точно так же, getSupportFragmentManager() не был распознан, и мне не очень понравилось предлагаемое решение по созданию SherlockMapFragment, портящего библиотеку ABS, поэтому я продолжал копать.
Скорее всего, вы уже знали об этом, но я просто понимаю, что вы (как и я 10 минут назад) пытались обработать фрагмент, который определен в xml, но еще не создан (проиндексирован).
Взглянув на документацию, проверяющую порядок вызовов во фрагментных методах, я попробовал код в другом методе после onCreateView()... и изменил getSupportFragmentManager () для getFragmentManager() или даже следуя решению, данному с использованием getSherlockActivity(). GetSupportFragmentManager () Я мог бы обработать те фрагменты, которые уже существуют.
public class MapsFragment extends SherlockFragment {
private SupportMapFragment mSupportMapFragment;
private GoogleMap map;
private Marker spotAMarker;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.maps_fragment, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
mSupportMapFragment = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map_fragment_test); //THIS ONE
mSupportMapFragment = (SupportMapFragment) getSherlockActivity().getSupportFragmentManager().findFragmentById(R.id.map_fragment_test); //OR THIS ONE
if(mSupportMapFragment != null) {
map = mSupportMapFragment.getMap();
if(map != null) {
spotAMarker = map.addMarker(new MarkerOptions().position(new LatLng(4.651904,-74.057352)).
title(getString(R.string.spot_a_title)).snippet(getString(R.string.spot_a_subtitle)).
icon(BitmapDescriptorFactory.fromAsset("images/spot_a.png")));
spotAMarker.setDraggable(true);
} else {
Toast.makeText(this.getActivity(), getString(R.string.no_map_error), Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(this.getActivity(), "No Map Fragment", Toast.LENGTH_LONG).show();
}
super.onActivityCreated(savedInstanceState);
}
}
Может быть, у вас уже есть решение этой проблемы, но я хотел бы поделиться своим опытом с другими, застрявшими в той же проблеме.