Интеграция 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;
}