gpt4 book ai didi

android - 使用 NavigationDrawer 在 Fragments 和 MapFragment 之间切换 *已修复*

转载 作者:行者123 更新时间:2023-11-29 17:51:41 26 4
gpt4 key购买 nike

问题已解决。进一步向下滚动!

我目前正在编写一个具有抽屉导航的应用程序。我想要其中一个 fragment 中的 map 。

要在抽屉导航中的 fragment 之间切换,我有这个 Switch case:

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");
}
}

这是我的 map 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 的错误:“类型不匹配:无法从 SupportMapFragment 转换为 Fragment”

编辑 2:问题已解决! 最大的错误是我导入了错误的 fragment 。正确的导入是 android.support.v4.app.Fragmentandroid.support.v4.app.FragmentManager。当我解决这个问题时,我不得不在我有抽屉导航的主要 Activity 中更改一些东西。

修复之后, map 可以正常工作,但是当我通过抽屉导航切换 fragment 并返回时,应用程序崩溃了。我通过一些变通解决了这个问题。我在此下方发布更新的代码。

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

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");
}
}

这是带有 map 的 fragment 。

公共(public)类 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”方法解决了我的崩溃问题。

最佳答案

针对情况 0 试试这个:

 fragment = new MapFragment(); 

因为您正在扩展 SupportMapFragment(它扩展了 fragment )

关于android - 使用 NavigationDrawer 在 Fragments 和 MapFragment 之间切换 *已修复*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22478475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com