【发布时间】:2016-10-27 00:12:19
【问题描述】:
我有一个 Activity 并将两个片段(MapScreenFragment 和 OtherFragment)加载到后台堆栈。我遇到的问题是,当我开始从后台弹出一些片段时,MapScreenFragment 显示黑屏。
我应该为 MapView 设置新的地图吗?
map = new Map();
mapView.setMap(map);
XML 布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.here.android.mpa.mapping.MapView
android:id="@+id/map_view"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
</FrameLayout>
片段类
public class MapScreenFragment extends Fragment {
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume");
if(isMapEngineInitialized && mapEngine != null) {
mapEngine.onResume();
mapView.onResume();
Log.d(TAG, " onResume Map engine reference " + mapEngine.getResourceReferenceCount());
}
}
@Override
public void onPause() {
super.onPause();
Log.d(TAG, "onPause");
if(isMapEngineInitialized && mapEngine != null) {
mapEngine.onPause();
mapView.onPause();
Log.d(TAG, " onPause Map engine reference " + mapEngine.getResourceReferenceCount());
}
}
}
/***** added ******/
OnEngineInitListener onEngineInitListener = new OnEngineInitListener() {
@Override
public void onEngineInitializationCompleted(Error error) {
if(error == Error.NONE) {
isMapEngineInitialized = true;
if(map == null) {
Log.d(TAG, " Map is null");
map = new Map();
}
mapView.setMap(map);
mapView.setMapMarkerDragListener(MapScreenFragment.this);
map = mapView.getMap();
map.addTransformListener(MapScreenFragment.this);
mapGesture = mapView.getMapGesture();
mapGesture.setAllGesturesEnabled(true);
mapGesture.addOnGestureListener(MapScreenFragment.this);
setUpMap();
Log.d(TAG, "MapEngine initialized! " + mapEngine.getResourceReferenceCount());
}
}
};
MainActivity Backpressed 并添加 Fragments
mapFragment = new MapScreenFragment ();
mFragmentTransaction = getSupportFragmentManager().beginTransaction();
mFragmentTransaction.add(R.id.main_frame_layout, mapFragment , mdmFragmentID);
mFragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
mFragmentTransaction.addToBackStack(null);
mFragmentTransaction.commit();
otherFragment = new OtherFragment ();
mFragmentTransaction = getSupportFragmentManager().beginTransaction();
mFragmentTransaction.replace(R.id.main_frame_layout, otherFragment , mdmFragmentID);
mFragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
mFragmentTransaction.addToBackStack(null);mFragmentTransaction.commit();
@Override
public void onBackPressed() {
Log.d(TAG, "Back stack count " + getSupportFragmentManager().getBackStackEntryCount());
if( getSupportFragmentManager().getBackStackEntryCount() == 1) {
finish();
} else {
getSupportFragmentManager().popBackStack();
}
}
【问题讨论】:
-
另外,您使用的是哪个 SDK 版本?
标签: android android-fragments sdk here-api