3

を含む 2 つのアクティビティがありますMapView。アクティビティ A では、マップビューのサイズがアクティビティ B とは異なります。呼び出し階層はActivityA -> ActivityB です。B から A に戻るActivityと、マップの半分が黒くなります (Google サインのみが左隅に残ります)。地図を移動しても効果はありません (地図の下部はまだ黒いままです) 拡大/縮小するだけで、地図が適切に表示されます。

Androidマニフェストでは、異なるIDを使用しています。メソッドでinvalidate()mapviewを試しましたが、レイアウト全体を呼び出そうとしましたが、効果はありませんでした。唯一の解決策は、アクティビティを作成し、アクティビティ B のキーバックで再度作成することでした。これを修正する他の方法はありますか?onResume()findViewById(android.R.id.content).requestLayout()onResume()finish()onPause()

4

3 に答える 3

3

MapView問題は、Google Maps API では、複数のインスタンスを同時にアクティブにできないことです。ActivityAから Bを開くActivityと、ActivityA はまだスタックに残り、まだ機能しMapViewています。したがってMapViewActivityB で別のインスタンスを作成すると、古い方が異常な動作を開始します。いくつかの回避策がありますが、いずれも安定しているとは言えません。そのため、ActivityA を破棄して再作成するソリューションを使用するか、アプリケーションを再設計して、そのうちの 1 つだけActivitiesMapView. お役に立てれば。

于 2012-11-06T18:47:32.503 に答える
2

LogCatに、アクティビティが遅延のないマップを再利用していることがわかります。

MapActivity: Recycling map object

マップ内の古い設定を復元するには、両方のアクティビティでonResumeメソッドを使用します。

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

    MapController mapController = mMapView.getController();

    mapController.setCenter(mCenterPoint);
    mapController.setZoom(mZoomLevel);
    mapController.animateTo(mCenterPoint);
}

onCreateは1回だけ呼び出され、戻るボタンまたは新しいインテントは(うまくいけば)スタック上の実際のインテントを再利用します。

于 2012-11-06T19:02:37.523 に答える
0

ほとんどの場合、maponCreateメソッドをインスタンス化したことが原因であるため、最初はマップが正常に表示されますが、戻ったときにonCreateメソッドが呼び出されず、マップが開始されません。マップの初期化をonStartメソッドに移動します。

アクティビティライフサイクルのドキュメントが役立つかもしれません

PS:あなたがあなたのコードを投稿するならあなたを助けるのは簡単でしょう。

于 2012-11-06T18:56:26.377 に答える