我已经发现了一个包含两个标签的简单活动。这些标签与片段相关联:第一个是MapFragment
,第二个是ListFragment
。
我以这种方式覆盖了onCreate
方法:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.path_summary);
final ActionBar actionbar = getActionBar();
actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionbar.addTab(actionbar.newTab()
.setText("Map")
.setTabListener(new TabListener<com.google.android.gms.maps.MapFragment>(
this, "map", com.google.android.gms.maps.MapFragment.class)));
actionbar.addTab(actionbar.newTab()
.setText("List")
.setTabListener(new TabListener<com.example.northfinder.PathListFragment>(
this, "list", com.example.northfinder.PathListFragment.class)));
if (savedInstanceState != null) {
actionbar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
}
}
然后我需要在地图上写(添加一个标记),所以我重写了onResume方法:
protected void onResume() {
super.onResume();
FragmentManager fm = getFragmentManager();
Fragment f = fm.findFragmentByTag("map");
if(f!= null && f.isAdded())
setUpMapIfNeeded((MapFragment)f);
}
其中setUpIfNeeded
定义如下:
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();
}
if (mMap != null) {
mMap.clear()
mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
}
}
一切都很好。当Activity开始时,标记在MapFragment中正确添加,当我更改制表符然后我返回第一个标签时,标记仍然可见。
我遇到了一个问题:当方向改变时,标记会消失。为什么呢?
答案 0 :(得分:0)
我解决了在回调onTabSelected
和onTabReselected
if(mTag.compareToIgnoreCase("map")==0)
{
setUpMapIfNeeded((MapFragment)mFragment);
}