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是我的第一个活动的标记,mthodsetupmapifneedd
是:
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操作的代码?我认为您可以:
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// if map tab
ft = addMapFragment(ft);
}
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并添加映射时,都要添加标记。如果你在某一点上有很多标记,这将真的减慢你的应用程序。