0

ここで見られるようにマップフラグメントを作成しましたMapView in a Fragment (Honeycomb)がうまく機能します。

問題は、次のアクティビティに別のマップ フラグメントがある場合です。

アクティビティ A には、ページ全体を占める MapFragment があります。アクティビティ B には、ページの半分だけを占める MapFragment があります (下半分には ListFragment があります)。どちらも正常に動作しますが、戻るボタンをクリックしてアクティビティ B から A に戻ると、マップ ビューはページの半分しか占有せず、ページの下半分には更新の問題があります。

マップビューの状態は、他とは独立して保存されません。例: アクティビティ A からアクティビティ B に移動すると、マップは同じように表示されます。これで問題ありません。しかし、ユーザーがアクティビティ B でマップをパンまたはズームすると、ユーザーがアクティビティ A に戻ると、マップはそのアクティビティが一時停止されたときの場所には戻りません (これは明らかに大きな問題ではありません。状態を手動で保存して再配置します。

これは、アクティビティ B から戻った後のアクティビティ A の外観です。 更新されたマップビューが正しくない

4

2 に答える 2

1

より良い解決策があるかどうかを知らせるように求められましたが、現在あります。Googleが提供するAndroid Maps API v2をリリースしましMapFragmentた。今では魅力のように機能するはずです。

于 2012-12-06T10:41:01.800 に答える
0

解決策を見つけましたが、より良い解決策を見つけることができる場合はお知らせください。

問題は、アクティビティ A が再開されたときに、フラグメントが決して再描画されず、アクティビティ B のサイズを維持することを意味するわけではないことです。

この問題を解決するには、以下のメソッドを MapFragment に追加し、アクティビティ onResume() から呼び出す必要がありました。これにより、マップが元のスペースを占めるようにサイズ変更されます。はい、これは大規模なハックです。フラグメントが正しく確実に作成、破棄、再開される方法を見つけた場合は、ここに回答を投稿してください。

/**
 * This method should be called in the activity containing the fragments onResume method
 * to ensure the mapview in this fragment has the expected size.
 *
 * @param width
 * @param height
 */
public void setMapViewSize(int width, int height){
    LayoutParams lp = new LayoutParams(width, height);
    myMapView.setLayoutParams(lp);
}

明確にするために、MapFragment と言うときは、マップを含むアクティビティをロードするクラス (ActivityHostFragment を拡張する) ではなく、MapActivity を拡張するクラスについて話しているのです。

于 2012-10-24T06:20:47.803 に答える