Android 另一个片段中的映射片段导致活动崩溃
我使用的是一个选项卡式活动,在第一个片段中我使用的是map fragment。它工作正常,但问题是如果我在这个活动中的其他片段之间切换,整个活动就会崩溃。删除映射片段后,代码运行良好。但是我想在片段中放置一个映射,因此请提供帮助。这是我的映射片段xml代码Android 另一个片段中的映射片段导致活动崩溃,android,google-maps,android-fragments,Android,Google Maps,Android Fragments,我使用的是一个选项卡式活动,在第一个片段中我使用的是map fragment。它工作正常,但问题是如果我在这个活动中的其他片段之间切换,整个活动就会崩溃。删除映射片段后,代码运行良好。但是我想在片段中放置一个映射,因此请提供帮助。这是我的映射片段xml代码 <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="350dp"
android:layout_height="200dp"
android:layout_marginTop="20dp"
android:id="@+id/map"
android:layout_below="@+id/textView6"
android:layout_alignParentLeft="true"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_alignParentStart="true"
android:layout_marginLeft="19dp"
android:layout_marginStart="19dp"
这是我的片段代码
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mapFragment = ((SupportMapFragment) getChildFragmentManager()
.findFragmentById(R.id.map));
mapFragment.getMapAsync(this);
}
@Override
public void onDestroy() {
super.onDestroy();
if (mapFragment != null) {
//mMap = null;
mapFragment=null;
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
//Toast.makeText(getActivity(), lat + " " + lng, Toast.LENGTH_LONG).show();
LatLng locations = new LatLng(Util.reslatitude,Util.reslogitide);
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
mMap.setMyLocationEnabled(true);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(locations, 13));
mMap.addMarker(new MarkerOptions()
.title("abc")
.position(locations));
}
提前感谢您不要在第一个片段中使用map fragment。不要在创建的活动中初始化mapFragment在创建视图中初始化它
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mapFragment = ((SupportMapFragment) getChildFragmentManager()
.findFragmentById(R.id.map));
mapFragment.getMapAsync(this);
}
您的onActivityCreated
应该是
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
添加以下代码,让我知道它是否有效
@Override
public void onPause() {
super.onPause();
getChildFragmentManager().beginTransaction()
.remove(mapFragment)
.commit();
}
你能发布你的logcat输出吗?请使用android:classshare分享你的片段代码,其中有地图你是如何启动片段的?我的意思是你是替换了还是添加了。我建议您像下面这样启动您的片段getSupportFragmentManager().beginTransaction().replace(R.id.container,new MapFragment(),“MapFragment”).commit();
@Override
public void onPause() {
super.onPause();
getChildFragmentManager().beginTransaction()
.remove(mapFragment)
.commit();
}