在选项卡导航中使用SupportMapFragment子类与ActionBarSherlock的结合

3
请参考我的之前的问题,了解它的工作原理。 当前设置 我创建了一个名为SherlockMapFragment的类,它在ActionBarSherlock(ABS)库中扩展了SupportMapFragment。这可以很好地显示地图等内容,但我直到现在才意识到(因为我是个白痴),以下内容:
  • 我创建了一个名为mapFrag的SherlockMapFragment实例。
  • 然后要使用和显示它,我调用了mapFrag.newInstance()。
实际上,这实际上返回的是一个SupportMapFragment实例,但是必须调用此函数才能显示MapView。
这对于我想要实现的目标来说是一个巨大的问题,因为我正在尝试将我的片段添加到选项卡导航栏中,但显然我不能将SupportMapFragment添加到TabListener中,因为它期望的是SherlockFragmentFragment的扩展,因此会出现各种类型转换异常等。
有人能看到解决这个问题的方法吗?或者如果我需要让自己更清楚,请随时提问。 一种可能的解决方案 一种解决方案是创建自己的选项卡栏,并自己处理Fragments的事务。但是,这些工具已经存在,如果这是一个简单的修复,我不想这样做。 提前感谢
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用作普通View。


我正在尝试通过将MapView包含在我的xml布局中来插入它,但是我不知道要将其转换为哪个类,因为我一直收到“ClassCastException”错误。请参见此问题http://stackoverflow.com/questions/13803385/android-google-maps-api-v2-0-including-mapview-in-xml - StuStirling

0
试试这个:

public class BysFragmentActivity extends 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) {

    }

}

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接