3

有关其工作原理的详细信息,请参阅我之前的问题

当前设置

SherlockMapFragmentActionBarSherlock(ABS) 库中创建了一个名为的类,该类扩展了SupportMapFragment. 这可以很好地显示地图等,直到现在我才意识到(因为我是个白痴)以下内容:

  • 我创建了一个名为 mapFrag 的 SherlockMapFragment 实例。
  • 然后为了使用和显示它,我调用 mapFrag.newInstance()。

这实际上是在返回一个 SupportMapFragment 实例,但是这个调用是显示 MapView 所必需的。

这对于我想要实现的目标来说是一个巨大的问题,因为我试图将我的 Fragments 添加到选项卡式导航栏中,但显然我无法将 a 添加SupportMapFragment到 TabListener 因为我得到了各种类转换异常等,因为它期望扩展SherlockFragmentFragment

任何人都可以看到解决这个问题的方法吗?或者,如果我需要让自己更清楚,请提出问题。

一种可能的解决方案

一种解决方案是创建自己的标签栏并处理Fragments自己的事务。但是,这些工具已经存在,如果它是一个简单的修复,我真的不想这样做。

提前致谢

4

2 回答 2

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 用作普通视图。

于 2012-12-10T04:55:30.223 回答
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) {

    }

}

}

于 2013-01-14T21:52:07.730 回答