我正在创建一个简单的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操作(无需明确显示第一个标签)?
答案 0 :(得分:0)
我认为你可以:
重构onTabSelected的内容以调用addMapFragment(FragmentTransaction ft),只需将整个代码放在addMapFragment方法中并返回FragmentTransaction。 onTabSelected然后变成:
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();
}
}
答案 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);
}