0

Google Maps API V2 を使用している Android アプリケーションに問題があります。

2 つのフラグメントを持つ FragmentActivity があります。リストを含む 1 つのフラグメントと、GoogleMap オブジェクトを含む 1 つのフラグメント。私が達成したいのは、リストからマップを操作することです。

FragmentActivity では、次のようにマップ フラグメントを開始します。

customMapFragment = MapSectionFragment.newInstance();

FragmentActivity で、次のように GoogleMap を開始します。

mMap = customMapFragment.getMap();

この参照 - mMap - は、次のように、リスト フラグメントに渡したいものです。

listSectionFragment = new ListSectionFragment(mMap);

これは、リストフラグメントクラスからマップフラグメント上の特定のマップを簡単に操作できるようにしたいためです。これは私のコンストラクタです:

    public ListSectionFragment(GoogleMap mMap) {
    this.mMap = mMap;
}

ただし、これにより、 「フラグメント内のデフォルト以外のコンストラクターを回避してください。代わりに、デフォルトのコンストラクターと Fragment#setArguments(Bundle) を使用してください」というエラー/警告が表示されます。

また、GoogleMap は小包化できないため、バンドルで送信することはできません。

デフォルトのコンストラクターなしでこの問題を解決するにはどうすればよいですか?


編集:警告を抑制していますが、正常に動作しているようです。しかし、警告の説明が示すように、すべてのフラグメントには空のコンストラクターが必要であるため、アクティビティの状態を復元するときにインスタンス化できます。

これは、ある時点でランダムなクラッシュで私にキックバックしますか? 最良のオプションは、デフォルトのコンストラクターなしで問題を解決することです。

4

1 に答える 1

1

解決:

デフォルトのコンストラクターの代わりに onAttached を使用します。

このような:

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    if(!(activity instanceof MainFragmentActivity))
        throw new ClassCastException(activity.toString()
                + " must be of type MainFragmentActivity");
    parent = (MainFragmentActivity) activity;
    this.mMap = parent.getMap();
}
于 2013-03-13T14:47:47.990 に答える