Dan*_*erg 5 android google-maps google-maps-android-api-2
我有一个com.google.android.gms.maps.MapView动态创建的,使用
mapView = new MapView(DataManager.getInstance().getContext());
此mapView通过以下方式附加到父级addView(mapView).在我的程序后面的某个地方,我想通过调用删除这个mapView parent.removeAllViews();,但是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();
}
}
Run Code Online (Sandbox Code Playgroud)
我在尝试删除视图之前调用了remove方法,这就是它挂起的地方.onPause上的断点确实被触发,但onDestroy上的断点没有触发.我打电话给它们onCreate(),onResume()当它被创建时.调用onDestroy(),而不调用onPause()做的工作,但随后removeView(child)再次挂起.显然onPause挂起我的应用程序.有没有人对我能做些什么来弄清楚问题是什么?
编辑:还有一个补充,这个问题似乎只是在删除地图时发生public void onInfoWindowClick(final Marker marker) {.在这个函数中,我调用了删除视图的方法runOnUiThread().
好吧,这花了我一段时间,但我终于弄清楚了。它似乎要么是一个错误,要么是没有很好记录的东西。但显然是MapView.onPause()从
@Override
public void onInfoWindowClick(final Marker marker) {
Run Code Online (Sandbox Code Playgroud)
不起作用。这将挂起应用程序。我通过执行以下操作解决了这个问题:
@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);
Run Code Online (Sandbox Code Playgroud)
现在它工作得很好。我会将其作为错误报告给 Google ( https://code.google.com/p/gmaps-api-issues/issues/detail?id=8681 )。
| 归档时间: |
|
| 查看次数: |
481 次 |
| 最近记录: |