有关其工作原理的详细信息,请参阅我的previous question。
当前设置
我在SherlockMapFragment
(ABS)库中创建了一个名为ActionBarSherlock
的类,它扩展了SupportMapFragment
。这样可以很好地显示地图等,直到现在我才意识到(因为我是个白痴)以下内容:
这实际上做的是返回一个SupportMapFragment实例,但是这个调用对于显示MapView是必要的。
这是我想要实现的一个巨大的问题,因为我试图将我的片段添加到选项卡式导航栏中,但显然我无法将SupportMapFragment
添加到TabListener,因为我得到了各种类型的类型异常等,因为它期望SherlockFragment
或Fragment
的扩展。
有人能看到这方面的方法吗?或者如果我需要让自己更清楚,请问问题。
一种可能的解决方案
一种解决方案是创建自己的标签栏并自己处理Fragments
的事务。但是,这些工具已经存在,如果只是一个简单的修复,我真的不想这样做。
提前致谢
答案 0 :(得分:3)
你可以扩展SherlockFragment并自己处理MapView。这看起来像......
public class SherlockMapFragment extends SherlockFragment
{
private MapView mapView;
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
mapView = (MapView) getView().findViewById(R.id.my_map_id);
mapView.onCreate(savedInstanceState);
}
@Override
public void onResume()
{
super.onResume();
mapView.onResume();
}
@Override
public void onPause()
{
super.onPause();
mapView.onPause();
}
@Override
public void onLowMemory()
{
super.onLowMemory();
mapView.onLowMemory();
}
@Override
public void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
@Override
public void onDestroy()
{
super.onDestroy();
mapView.onDestroy();
}
}
没有什么说你绝对必须使用SupportMapFragment。新API最酷的部分之一是能够将MapView用作普通视图。
答案 1 :(得分:0)
试试这个
公共类BysFragmentActivity扩展了SherlockFragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Tab tab = actionBar.newTab()
.setText("Mapa 1")
.setTabListener(new TabListener<BySMapFragment>(this, "mapa", BySMapFragment.class));
actionBar.addTab(tab);
tab = actionBar.newTab()
.setText("Mapa 2")
.setTabListener(new TabListener<BySMapFragment>(this, "mapa", BySMapFragment.class));
actionBar.addTab(tab);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
}
@Override
public void onAttachFragment(android.support.v4.app.Fragment fragment) {
super.onAttachFragment(fragment);
}
public static class TabListener<T extends Fragment> implements ActionBar.TabListener {
private Fragment mFragment;
private final Activity mActivity;
private final String mTag;
private final Class<T> mClass;
public TabListener(Activity activity, String tag, Class<T> clz) {
mActivity = activity;
mTag = tag;
mClass = clz;
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if (mFragment == null) {
mFragment = Fragment.instantiate(mActivity, mClass.getName());
ft.replace(android.R.id.content, mFragment, mTag);
} else {
ft.attach(mFragment);
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (mFragment != null) {
ft.detach(mFragment);
}
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
}
}