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,这样当您在第三页时,第一页不会被销毁,反之亦然。

没想到我会这么容易:)它可以工作,谢谢;)