使用NavigationDrawer * FIXED *在片段和MapFragment之间切换

时间:2014-03-18 11:47:58

标签: android android-fragments google-maps-api-2 navigation-drawer

解决了问题。向下滚动!

我正在编写一个具有导航抽屉的应用程序。我希望其中一个片段中有一张地图。

要在导航抽屉中的片段之间切换,我有这个Switch案例:

private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;


    switch (position) {
    case 0:


        fragment =  new SupportMapFragment();

        break;
    case 1:
        fragment = new PlacesFragment();

        break;
    case 2:
    fragment = new LogbookFragment();

        break;
    case 3:
    fragment = new SettingsFragment();

        break;
    default:
        break;
    }

    if (fragment != null) {
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment).commit();



        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(navMenuTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    }

    else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }
}

这是我的地图片段:

public class MapFragment extends SupportMapFragment {

private GoogleMap map;

public MapFragment() {

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_map, null, false);

    map = ((SupportMapFragment) getFragmentManager().findFragmentById(
            R.id.map)).getMap();
    return v;
}

}

问题是我无法切换到mapfragment。我试图修改Swich案例,但我无法让它发挥作用。例如,我无法使用方法replace()来使用SupportMapFragment。

有人可以帮我解决我的问题吗?

谢谢。

编辑:更新了代码。仍然无法工作。

案例0错误:"Type mismatch: cannot convert from SupportMapFragment to Fragment"

编辑2:问题解决了!最大的错误是导入了错误的片段。正确的导入是android.support.v4.app.Fragmentandroid.support.v4.app.FragmentManager。当我修复它时,我不得不在我的主要活动中更改一些东西,我的导航抽屉。

在修复之后,地图有效,但是当我通过导航抽屉切换片段并返回时,应用程序崩溃了。我通过一些解决方法解决了这个问题。我在此下面发布了更新的代码。

这是内容更新和片段互相替换的地方。

private void displayView(int position) {
    // update the main content by replacing fragments
    android.support.v4.app.Fragment fragment = null;
    switch (position) {
    case 0:
        fragment = new PlacesFragment();

        break;
    case 1:
        fragment = new MapFragment();

        break;
    case 2:
        fragment = new LogbookFragment();

        break;
    case 3:
        fragment = new SettingsFragment();

        break;
    default:
        break;
    }

    if (fragment != null) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment).commit();

        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(navMenuTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    }

    else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }
}

这是地图上的片段。

公共类MapFragment扩展了Fragment {

private GoogleMap map;

public MapFragment() {

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_map, null, false);

    map = ((SupportMapFragment) getFragmentManager().findFragmentById(
            R.id.map)).getMap();

    return v;
}

@Override
public void onDestroyView() {

    SupportMapFragment f = (SupportMapFragment) getFragmentManager()
            .findFragmentById(R.id.map);

    if (f != null) {
        try {
            getFragmentManager().beginTransaction().remove(f).commit();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    super.onDestroyView();
}

}

方法" onDestroyView"是解决我崩溃问题的原因。

1 个答案:

答案 0 :(得分:3)

尝试使用案例0:

 fragment = new MapFragment(); 

因为您正在扩展SupportMapFragment(扩展片段)