2013-02-11 91 views
5

我希望能够通过用户按下操作栏按钮在列表片段和地图片段之间切换。目前我可以在它们之间进行交换,但是我试图从片段中获取实际的GoogleMap对象时遇到空指针。当我尝试移动相机时,由于GoogleMap对象为空并跳过该代码,它不会移动。我不确定这是否因为我从来没有真正从xml创建Fragment而只是使用代码这一事实而到期。我的代码如下:在Android地图v2片段和列表片段之间交换

public class MapFragment extends SherlockMapFragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View root = super.onCreateView(inflater, container, savedInstanceState); 
     return root; 
    } 

} 

    @Override 
    public void swapFragments() { 
     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction transaction = fm.beginTransaction(); 
     if (listFragment.isVisible()) { 
      sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); 
      transaction.replace(R.id.root, mapFragment); 
     } else { 
      sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); 
      transaction.replace(R.id.root, listFragment); 
     } 
     transaction.commit(); 
    } 

    @Override 
    public void setupMapFragment() { 
     mapFragment = new MapFragment(); 
     mMap = mapFragment.getMap(); 
     if (mMap != null) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
        new LatLng(BuzzbabaApplication.latitude, 
          BuzzbabaApplication.longitude), 14)); 
     } 
    } 

回答

3

我也遇到了这个问题。正如您所提到的那样,问题是由于您正在动态加载MapView而引起的。这意味着MapView在加载GoogleMap对象之前已完成加载。

甲GoogleMap的只能使用的GetMap()时标的地图系统被加载并在该片段中的底层视图存在

http://developer.android.com/reference/com/google/android/gms/maps/SupportMapFragment.html

我的解决方案是创建一个获取在XML中映射片段。这意味着当View完成加载时,GoogleMap对象也已加载并可被引用。

+0

嗯......所以目前我的主布局只是有一个FrameLayout,我用它来放入不同的列表片段,我想避免把地图片段放在那里,因为我马上就会隐藏它,直到他们点击有些东西,但这是唯一的选择吗? – egfconnor 2013-02-11 03:54:54

+1

没关系,我在onActivityCreated中添加了一个对MapFragment的回调,它表示GoogleMap不为null并且已准备就绪。这似乎是一个安全的地方。 – egfconnor 2013-02-11 04:07:51

+0

是的,添加回调是一个好方法。好的解决方案 – 2013-02-11 04:09:19