Java 替换viewPager中的MapFragment
这是我的问题。我在Java 替换viewPager中的MapFragment,java,android,google-maps,Java,Android,Google Maps,这是我的问题。我在viewPager中有RootMapFragment,这是一个容器,在未来我将有两个不同的映射RootMapFragment包含简单的FrameLayout和FragmentTransaction我想在onCreateView中将frame\u layout替换为marker\u map。在第一次创建marker_map时,一切都正常,地图中充满了从eventBus获取的标记。在viewPager中时,我有3个选项卡。地图位于第一个选项卡中。当我进入第二个选项卡并返回到第一个选
viewPager
中有RootMapFragment
,这是一个容器,在未来我将有两个不同的映射RootMapFragment
包含简单的FrameLayout
和FragmentTransaction
我想在onCreateView
中将frame\u layout
替换为marker\u map。在第一次创建marker_map时,一切都正常,地图中充满了从eventBus
获取的标记。在viewPager
中时,我有3个选项卡。地图位于第一个选项卡中。当我进入第二个选项卡并返回到第一个选项卡时,我的应用程序会用标记记住地图的早期状态,但当我进入第三个选项卡并返回到第一个选项卡时,应用程序正在创建地图的新实例,而它是空的。是否有一种解决方案,我的应用程序将记住第一个状态,而不是创建地图的新实例
RootMapFragment.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root_map_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.lwach.earthquakeapp.map.RootMapFragment">
</FrameLayout>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/marker_map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.lwach.earthquakeapp.map.MarkerMapFragment" />
MarkerMapFragment.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root_map_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.lwach.earthquakeapp.map.RootMapFragment">
</FrameLayout>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/marker_map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.lwach.earthquakeapp.map.MarkerMapFragment" />
MarkerFragment.java
public class RootMapFragment extends Fragment {
private SupportMapFragment map;
private FragmentManager fm;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_root_map, container, false);
fm = getChildFragmentManager();
map = (SupportMapFragment) fm.findFragmentById(R.id.marker_map);
if (map == null) {
map = SupportMapFragment.newInstance();
fm.beginTransaction().replace(R.id.root_map_fragment, new MarkerMapFragment()).commit();
}
return view;
}
}
public class MarkerMapFragment extends SupportMapFragment implements OnMapReadyCallback {
private GoogleMap mMap;
private Bus bus = BusProvider.getInstance();
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.getUiSettings().setMapToolbarEnabled(true);
mMap.getUiSettings().setZoomControlsEnabled(true);
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
}
@Subscribe
public void onServerEvent(ServerEvent serverEvent) {
List<Feature> features = serverEvent.getDataResponse().getFeatures();
ClusterManager<MarkerItem> clusterManager = new ClusterManager<>(getContext(), mMap);
clusterManager.setRenderer(new ClusterRenderer(getContext(), mMap, clusterManager));
mMap.setOnCameraIdleListener(clusterManager);
for (int i = 0; i < features.size(); i++) {
MarkerItem markerItem = new MarkerItem(features, i);
clusterManager.addItem(markerItem);
}
}
@Subscribe
public void onErrorEvent(ErrorEvent errorEvent) {
Toast.makeText(getActivity(), "" + errorEvent.getErrorMsg(), Toast.LENGTH_SHORT).show();
}
@Override
public void onResume() {
super.onResume();
bus.register(this);
if (mMap == null) {
getMapAsync(this);
}
}
@Override
public void onPause() {
super.onPause();
bus.unregister(this);
}
}
公共类MarkerMapFragment扩展了SupportMapFragment在MapreadyCallback上的实现{
私有谷歌地图;
private Bus=BusProvider.getInstance();
@凌驾
4月1日公开作废(谷歌地图谷歌地图){
mMap=谷歌地图;
mMap.getUiSettings().setMapToolbarEnabled(true);
mMap.getUiSettings().setZoomControlsEnabled(true);
mMap.setMapType(GoogleMap.MAP\u TYPE\u HYBRID);
}
@订阅
ServerEvent(ServerEvent ServerEvent)上的公共无效{
List features=serverEvent.getDataResponse().getFeatures();
ClusterManager ClusterManager=新的ClusterManager(getContext(),mMap);
setRenderer(新的ClusterRenderer(getContext(),mMap,clusterManager));
mMap.setonCameraideListener(集群管理器);
对于(int i=0;i
尝试使用
viewpager的方法
从文件:
设置应保留到页面两侧的页数
视图层次结构中处于空闲状态的当前页面。除此之外的页面
需要时,将从适配器重新创建限制
代码:
在您的情况下,您需要指定2,这样当您在第三页时,第一页不会被销毁,反之亦然。没想到我会这么容易:)它可以工作,谢谢;)