2013-02-15 58 views
4

所以我设法通过扩展Activity来更好地理解OSMDRoid的工作原理。将OSMDroid与片段集成

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)来显示。有谁知道如何实现这一点,还是能够提供一个示例实施指南让我遵循?

我需要这样做,因为我有一个活动容器,当我点击某个按钮时,我想要做一个片段.replace()来代替容器与OSMDRoid地图片段。

谢谢!

回答

1

无论您在活动或片段中使用它,osmdroid映射视图的工作原理都是一样的。只需将它放在布局文件中,然后将其充入碎片中,或直接在Fragment的onCreateView方法中创建MapView。在您的片段类

@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; 
} 
+0

不幸的是这对我来说并不像你显示什么那么简单......如果你能看到我的代码“的setContentView(R.layout.offline_map_activity); myOpenMapView =(MapView类)findViewById(R.id。打开MapView类);”我需要这样做。我怎么做碎片? – lyk 2013-02-20 14:49:24

1

在片段是这样的(改变的RelativeLayout到您的布局类型)创建onCreateView方法:

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