0

我正在創建一個簡單的活動,其中包含兩個選項卡。我遵循documentation,所以我使用Fragment。 在我的活動中只有兩個選項卡。第一個是地圖(MapFragment),第二個是簡單列表(ListFragment管理選項卡內的碎片

所有的作品都很好,我唯一的問題是我無法正確管理地圖。

onTabSelected回調我使用下面的代碼:

public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    if (mFragment == null) { 
     mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs); 
     ft.add(android.R.id.content, mFragment, mTag); 
    } else { 
     ft.attach(mFragment); 

     if(mTag.compareToIgnoreCase("map")==0) 
      setUpMapIfNeeded((MapFragment)mFragment); 

    } 
} 

其中地圖是我的第一個活動的標籤和mthod setUpMapIfNeeded是:

private static void setUpMapIfNeeded(MapFragment mMapFragment) { 
    // Do a null check to confirm that we have not already instantiated the map. 
    if (mMap == null) { 
     mMap = mMapFragment.getMap(); 
     // Check if we were successful in obtaining the map. 
     if (mMap != null) { 
      mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); 
     } 
    } 
} 

所以標記中添加僅當我選擇標籤時,地圖纔會顯示。

問題是:如何在啓動活動時(不顯式按第一個選項卡)修改用於執行addMarker操作的代碼?

回答

0

我認爲,你可以:

  1. 重構onTabSelected的內容調用addMapFragment(FragmentTransaction英尺),只是把整個代碼addMapFragment方法中,並返回FragmentTransaction。 onTabSelected就變成了:

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
        // if map tab 
        ft = addMapFragment(ft); 
    } 
    
  2. 這將使它更容易處理中的onCreate地圖和標記:

    protected void onCreate(Bundle savedInstanceState) { 
        ... 
        if (savedInstanceState != null) { 
         // not first startup - map should already be created with markers 
        } else { 
         FragmentTransaction ft = getFragmentMangager.beginTransaction(); 
         ft = addMapFragment(ft); 
         ft.commit(); 
        } 
    } 
    
0

我已經解決了添加以下代碼:

@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 

    FragmentManager fm = getFragmentManager(); 
    Fragment f = fm.findFragmentByTag("map"); 
    if(f!= null && f.isAdded()) 
     setUpMapIfNeeded((MapFragment)f); 
} 
+0

是一個解決方案,但隨後您每次添加標記onResume被調用並添加地圖。如果你在某個時候有很多標記,這會真的減慢你的應用。 – cYrixmorten