我有一个使用动态创建的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();
}
}
在尝试删除 View 之前,我先调用remove方法,这就是它的挂起位置。 onPause处的断点确实会触发,但onDestroy处的断点不会触发。创建后,我将其称为
onCreate()
和onResume()
。调用onDestroy()
而不调用onPause()
确实可以,但是removeView(child)
再次挂起。因此,显然onPause挂起了我的应用程序。有人对我能做些什么来找出问题所在有任何想法吗?编辑:
还有另外一个问题,仅当从
public void onInfoWindowClick(final Marker marker) {
中删除 map 时,才出现此问题。在此函数中,我调用通过runOnUiThread()
删除 View 的方法。 最佳答案
好的,这花了我一段时间,但我终于弄明白了。这似乎是错误或没有很好记录的东西。但显然是从调用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)。
关于Android使用MapView卡住在ViewGroup.removeAllViews()上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32841381/