gpt4 book ai didi

带有 fragment 的Android mapview不能添加两次?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:51:59 26 4
gpt4 key购买 nike

我将 android 兼容类与 hack 一起使用,以便在此处找到的 fragment 中使用 mapviews:https://github.com/petedoyle/android-support-v4-googlemaps

不幸的是,我发现如果 mapfragment 从 Activity 中删除,然后重新添加,我会收到“您只允许在 MapActivity 中有一个 MapView”错误。

我理解了报错的原理,尝试在fragments的onPause方法中销毁mapview。不幸的是,我似乎无法完全破坏 mapview,因为我仍在获取它。我的代码如下所示:

private RelativeLayout layout; 
private MapView mp;

public void onResume(){
super.onResume();
Bundle args = getArguments();
if(mp == null)
{
mp = new MapView(getActivity(), this.getString(R.string.map_api_key));
mp.setClickable(true);
}

String request = args.getString("requestId");
layout = (RelativeLayout) getView().findViewById(R.id.mapholder);
layout.addView(mp);
//TextView txt = (TextView) getView().findViewById(R.id.arguments);
//txt.setText(request);
}

public void onPause(){
super.onPause();
layout.removeView(mp);
mp = null;
}

有人对我在这里忽略销毁的引用资料有什么想法吗?

最佳答案

我遇到了同样的问题。这是我解决它的方法:

  • 因为它应该只是 Activity 中 mapView 的一个实例,所以我在 Activity 的 onCreate 方法中对其进行了初始化:

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // initialize MapView programmatically to be used in Fragment :
    this.mActivityMapView = new MapView(MainActivity.this, getString(R.string.debug_mapview_apikey));

    setContentView(R.layout.activity_main);
    }
  • 然后我在 fragment onCreateView 方法中恢复它:

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    this.mMapView = ((MainActivity) getActivity()).getMapView();
    return this.mMapView;
    }
  • 然后我在 fragment onDestroy 方法中销毁它:

    public void onDestroy() {
    NoSaveStateFrameLayout parentView = (NoSaveStateFrameLayout) this.mMapView.getParent();
    parentView.removeView(this.mMapView);
    super.onDestroy();
    }

关于带有 fragment 的Android mapview不能添加两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7818448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com