Android 管理选项卡内的片段

Android 管理选项卡内的片段,android,google-maps,android-fragments,android-activity,android-actionbar,Android,Google Maps,Android Fragments,Android Activity,Android Actionbar,我正在创建一个简单的活动,它包含两个选项卡。我遵循的是,所以我使用的是Fragment。 在我的活动中只有两个选项卡。第一个是映射(MapFragment),第二个是简单列表(ListFragment) 一切正常,我唯一的问题是我无法正确管理地图 在onTabSelected回调中,我使用了以下代码: public void onTabSelected(Tab tab, FragmentTransaction ft) { if (mFragment == null) {

我正在创建一个简单的活动,它包含两个选项卡。我遵循的是,所以我使用的是
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);

    }
}
其中map是我的第一个活动的标记,mthod
setupmapifneedd
是:

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操作的代码?我认为您可以:

  • 重构onTabSelected的内容以调用addMapFragment(FragmentTransaction ft),只需将整个代码放入addMapFragment方法中并返回FragmentTransaction。然后,被选为:

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // if map tab
        ft = addMapFragment(ft);
    }
    
  • 这将便于在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();
        }
    }
    

  • 我已解决添加此代码的问题:

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

    是一个解决方案,但是每次调用onResume并添加映射时,都要添加标记。如果你在某一点上有很多标记,这将真的减慢你的应用程序。