管理选项卡内的碎片

时间:2014-03-06 12:05:26

标签: android google-maps android-fragments android-activity android-actionbar

我正在创建一个简单的Activity,它包含两个标签。我正在关注documentation,所以我正在使用Fragment。 在我的Activity中只有两个选项卡。第一个是地图(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是我的第一个Activity的标记,而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操作(无需明确显示第一个标签)?

2 个答案:

答案 0 :(得分:0)

我认为你可以:

  1. 重构onTabSelected的内容以调用addMapFragment(FragmentTransaction ft),只需将整个代码放在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();
        }
    }
    

答案 1 :(得分: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);
}