Интеграция OSMDroid с фрагментами

Поэтому мне удалось лучше понять, как работает OSMDRoid... путем расширения Activity.

public class POfflineMapView extends Activity implements LocationListener, MapViewConstants{

    private MapView myOpenMapView;
    private OsmMapsItemizedOverlay mItemizedOverlay;
    private ResourceProxy mResourceProxy;
    private OverlayItem overlayItem;
    private ArrayList<OverlayItem> mItems = new ArrayList<OverlayItem>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        mResourceProxy = new DefaultResourceProxyImpl(getApplicationContext());
        setContentView(R.layout.offline_map_activity);
        myOpenMapView = (MapView) findViewById(R.id.openmapview);
        myOpenMapView.getTileProvider().clearTileCache();

        //.... code continues
    }
}

Однако у меня возникают трудности с поиском примеров для отображения с использованием OSMDRoid Maptiles с использованием реализации фрагментов (например, SherlockMapFragment). Кто-нибудь знает, как реализовать это, или может предоставить пример руководства по внедрению для меня, чтобы следовать?

Мне нужно сделать это, так как у меня есть контейнер Activity, и когда я нажимаю на определенную кнопку, я хочу сделать фрагмент.replace(), чтобы заменить контейнер на фрагмент карт OSMDRoid, по возможности.

Спасибо!

2 ответа

Представление карты osmdroid работает одинаково, независимо от того, используете ли вы его внутри Activity или Fragment. Просто поместите его в файл макета и накачайте его в свой фрагмент или создайте MapView непосредственно в onCreateView метод вашего фрагмента.

Чтобы создать фрагмент, содержащий карту по умолчанию, вы можете сделать что-то вроде этого:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
  return new MapView(getActivity(), 256);
}

в вашем классе фрагмента.

Если вы хотите использовать макет, который содержит ваш MapView, вы можете сделать что-то вроде этого в вашем фрагменте:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
  View v = inflater.inflate(R.layout.offline_map_activity, null);
  myOpenMapView = v.findViewById(R.id.openmapview);
  return v;
}

Создайте метод onCreateView во Fragment следующим образом (измените RelativeLayout на ваш тип макета):

public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    RelativeLayout rl = (RelativeLayout) inflater.inflate(offline_map_activity, container, false);
    myOpenMapView = (MapView) rl.findViewById(R.id.openmapview);

    //.... code continues

    return rl;
}
Другие вопросы по тегам