解决了问题。向下滚动!
我正在编写一个具有导航抽屉的应用程序。我希望其中一个片段中有一张地图。
要在导航抽屉中的片段之间切换,我有这个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.Fragment
和android.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"是解决我崩溃问题的原因。
答案 0 :(得分:3)
尝试使用案例0:
fragment = new MapFragment();
因为您正在扩展SupportMapFragment(扩展片段)