位置和标记未第二次加载到android地图片段上

位置和标记未第二次加载到android地图片段上,android,google-maps,android-fragments,google-maps-markers,Android,Google Maps,Android Fragments,Google Maps Markers,我有一个包含5个选项卡的活动,每个选项卡都包含一个片段。 中间的选项卡包含一个布局,我在其中动态添加一个地图片段。在这之前一切都很顺利。 现在,当我移动到选项卡1或5并返回到第三个选项卡时,我的所有标记和当前位置将从地图上消失 我尝试使用日志查找问题,并且调用了包括onMapReady在内的所有方法,包括添加标记和启用此函数中的当前位置,但是地图上没有显示任何内容。处理标记数据和打印日志需要时间。但是什么也没有出现。所以这就更加令人费解了 有人知道如何解决这个问题吗?当您希望在本地存储少量数据时

我有一个包含5个选项卡的活动,每个选项卡都包含一个片段。 中间的选项卡包含一个布局,我在其中动态添加一个地图片段。在这之前一切都很顺利。 现在,当我移动到选项卡1或5并返回到第三个选项卡时,我的所有标记和当前位置将从地图上消失

我尝试使用日志查找问题,并且调用了包括onMapReady在内的所有方法,包括添加标记和启用此函数中的当前位置,但是地图上没有显示任何内容。处理标记数据和打印日志需要时间。但是什么也没有出现。所以这就更加令人费解了


有人知道如何解决这个问题吗?

当您希望在本地存储少量数据时,您可以随时使用共享首选项,即使用户在应用程序之间切换,您也不希望丢失这些数据。您的案例看起来很相似,因为当您在活动的选项卡之间切换时,标记会消失。对于当前位置,无论何时实例化地图,都可以调用onLocationChanged

用于在共享首选项中存储地图标记。。。下面是一个小代码片段。。按下后退按钮时,此代码保存标记的状态。。您可以在更改选项卡时在侦听器中传递相同的方法SavePreferences,并在加载地图选项卡时检索该方法

    public class MapsActivity extends FragmentActivity {

    private GoogleMap mMap; // Might be null if Google Play services APK is not available.
    private List<Marker> markerList;

    public MapsActivity(){
        if(markerList == null){
            markerList = new ArrayList<Marker>();
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        setUpMapIfNeeded();

        LoadPreferences();
        Intent intent = getIntent();
        Bundle data = intent.getExtras();
        String label = data.getString("sum");
        int newLatitude = data.getInt("firstNumber");
        int newLongitude = data.getInt("secondNumber");

        MarkerOptions mo = new MarkerOptions().position(new LatLng(newLatitude, newLongitude)).title(label);
        markerList.add(mMap.addMarker(mo));
    }

    @Override
    protected void onResume() {
        super.onResume();
        setUpMapIfNeeded();
    }

    @Override
    public void onBackPressed(){
        super.onBackPressed();
        SavePreferences();
    }

    private void SavePreferences(){
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();

        editor.putInt("listSize", markerList.size());

        for(int i = 0; i <markerList.size(); i++){
            editor.putFloat("lat"+i, (float) markerList.get(i).getPosition().latitude);
            editor.putFloat("long"+i, (float) markerList.get(i).getPosition().longitude);
            editor.putString("title"+i, markerList.get(i).getTitle());
        }

        editor.commit(); 
    }

    private void LoadPreferences(){
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);

        int size = sharedPreferences.getInt("listSize", 0);
        for(int i = 0; i < size; i++){
            double lat = (double) sharedPreferences.getFloat("lat"+i,0);
            double longit = (double) sharedPreferences.getFloat("long"+i,0);
            String title = sharedPreferences.getString("title"+i,"NULL");

            markerList.add(mMap.addMarker(new MarkerOptions().position(new LatLng(lat, longit)).title(title)));
        }
    }
}

希望这会有帮助

你写这篇文章已经很久了,但今天我在寻找解决方案时偶然发现了你的问题。在我能够通过以下方式解决问题后不久,在断开GoogleAppClient之前,还要删除ConnectionCallbackListener我的活动,如:

我的流程是这样的: 创建视图时初始化MapView。连接GoogleAppClient。在ConnectionCallbackListener.onConnected上,我执行我需要的操作,然后取消注册并断开连接


希望这对你有帮助

我偶然发现了一个类似的问题,尽管它涉及到用后退按钮结束应用程序,而不是终止它。之后,当我再次打开应用程序时,标记不会显示,googleMap.animateCamera会抛出一个异常,表示地图大小不能为0


事实证明,我使用了片段的一个实例,并通过MapFragment.getInstance this从MainActivity调用它,因此解决方案是在片段的onDestroy方法上设置instance=null。

调试我们看不到的代码很难。发布在选项卡和MapFragment代码之间切换时的代码。因此,我们可以了解问题所在。您的视图可能会被破坏,请先共享您的代码
googleApiClient.unregisterConnectionCallbacks(this);
googleApiClient.disconnect();