我有一个com.google.android.gms.maps.MapView
,我使用
mapView = new MapView(DataManager.getInstance().getContext());
此mapView通过addView(mapView)
附加到父级。在我的程序后面的某个地方,我想通过调用parent.removeAllViews();
删除这个mapView,但是android只是停止了。该应用程序完全冻结,我不明白为什么。我该怎么做才能解决这个问题?
编辑:
我使用CustomMapView
进行了更多研究:
import android.content.Context;
import android.view.View;
import com.google.android.gms.maps.MapView;
/**
* @author Daniël van den Berg
* @date 9/30/2015.
*/
public class CustomMapView extends MapView {
public CustomMapView(Context context) {
super(context);
}
@Override
public void onViewRemoved(View child) {
super.onViewRemoved(child);
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
}
public void remove() {
onPause();
onDestroy();
}
}
在尝试删除视图之前调用remove方法,这就是它挂起的地方。 onPause上的断点确实被触发,但onDestroy上的断点没有触发。创建时我会同时调用onCreate()
和onResume()
。调用onDestroy()
而不调用onPause()
确实有效,但removeView(child)
再次挂起。显然onPause挂起我的应用程序。有没有人对我能做些什么来找出问题是什么?
编辑:
还有一个补充,只有在从public void onInfoWindowClick(final Marker marker) {
中删除地图时才会出现此问题。在此函数中,我调用通过runOnUiThread()
删除视图的方法。
答案 0 :(得分:3)
好的,这个花了我一段时间,但我终于明白了。它似乎是一个bug或者没有记录得很好的东西。但显然是从
中调用MapView.onPause()
@Override
public void onInfoWindowClick(final Marker marker) {
不起作用。这将挂起应用程序。我通过以下方式解决了这个问题:
@Override
public void onInfoWindowClick(final Marker marker) {
new Handler().postDelayed(
new Runnable() {
@Override
public void run() {
MainActivity.getInstance().runOnUiThread(
new Runnable() {
@Override
public void run() {
myMethods();
}
});
}
}, 1);
现在它完美无缺。我会将此报告为Google的错误(https://code.google.com/p/gmaps-api-issues/issues/detail?id=8681)。