![](/img/trans.png)
[英]Google Maps Android: java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to com.google.android.gms.maps.SupportMapFragment
[英]SupportMapFragment cannot be added to FrameLayout
我已经在活动的onCreate中将mapFragment添加到FrameLayout中
getSupportFragmentManager().beginTransaction()
.replace(R.id.frame_container,//where frame_container is a FrameLayout
new MapyFragment(),
MapyFragment.class.getSimpleName()).commit();
并且frame_container是一个FrameLayout
MapyFragment.class
public class MapyFragment extends Fragment {
private SupportMapFragment supportMapFragment;
private GoogleMap map;
@Override
public void onCreate(Bundle savedInstanceState) {
setRetainInstance(true);
setHasOptionsMenu(true);
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_mapy, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
FragmentManager fm = getChildFragmentManager();/// getActivity().getSupportFragmentManager();/// getChildFragmentManager();
supportMapFragment = (SupportMapFragment) fm.findFragmentById(R.id.map_container);
if (supportMapFragment == null) {
supportMapFragment = SupportMapFragment.newInstance();
fm.beginTransaction().replace(R.id.map_container, supportMapFragment).commit();
}
}
@Override
public void onResume() {
super.onResume();
if (supportMapFragment != null) {
supportMapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
map = googleMap;
map.animateCamera(CameraUpdateFactory.zoomTo(15));
}
});
}
}
}
我尝试使用getChildFragmentManager和getActivity.getSupportFragmentManager()进行更改。
Google地图不显示。 没有崩溃,我在做什么错。 请澄清并
以及为什么我们必须使用fragmentManger来获取我们的map_container。 看到
fm.findFragmentById(R.id.map_container);
fragment_mapy.xml
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/map_container"
class="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="40dp"
map:uiZoomControls="true" />
尝试这个:
在onCreateview
初始化您的supportMapFragment
。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View rootView = inflater.inflate(R.layout.activity_map, container, false);
smp = (SupportMapFragment) this.getChildFragmentManager().findFragmentById(R.id.map);
smp.getMapAsync(this);
retrun rootView;
}
@Override
public void onMapReady(GoogleMap map) {
mMap = map;
}
在布局xml中:
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
在这里也了解有关SupportMapFragment的信息
解决我自己的问题
首先, b / w android:name
和android:class
都可以正常工作。 看到这个
getChildFragmentManager()是元凶。
最新工人阶级
public class MapyFragment extends Fragment implements OnMapReadyCallback {
private SupportMapFragment supportMapFragment;
private GoogleMap map;
@Override
public void onCreate(Bundle savedInstanceState) {
setRetainInstance(true);
setHasOptionsMenu(true);
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_mapy,container,false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
FragmentManager fm = getActivity().getSupportFragmentManager();/// getChildFragmentManager();
supportMapFragment = (SupportMapFragment) fm.findFragmentById(R.id.map_container);
if (supportMapFragment == null) {
supportMapFragment = SupportMapFragment.newInstance();
fm.beginTransaction().replace(R.id.map_container, supportMapFragment).commit();
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
map = googleMap;
map.animateCamera(CameraUpdateFactory.zoomTo(15));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.