3

私はGoogleマップの表示を実装しようとしています.以下は私のコードです:

package com.fragments;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;

public class MapFragment extends SherlockMapFragment {

    private GoogleMap mMap;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = super.onCreateView(inflater, container, savedInstanceState);
        SupportMapFragment mapFrag= (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.fragment_map);
        mMap = mapFrag.getMap();
        return root;
    }
}

getSupportFragmentManager() がタイプ MapFragment に対して未定義であるというエラーが表示されます。ただし、com.google.android.gms.maps.SupportMapFragment をインポートしたので、少し混乱しています。この方法はそこから来るべきではありませんか?このメソッドを機能させるためのいくつかの手順を見逃していますか?

4

2 に答える 2

6

このSherlockMapFragmentを使用している場合は、次を試してください。

getSherlockActivity().getSupportFragmentManager();
于 2013-01-26T17:59:14.297 に答える
0

おい、私はまったく同じ問題を抱えていたので、これと他の2つの質問(とりわけ)を読むのに最後の数時間を費やしました。ABS+GMapsV2.0+FragmentActivity で動作するアプリを持っていましたが、すべてフラグメント化するのが良い方法だとよく耳にするので、コンテナとしてフラグメントと FragmentActivities に移植し始めました。

マップを移植したときもまったく同じことが起こり、getSupportFragmentManager() が認識されず、ABS ライブラリを台無しにする SherlockMapFragment を作成する提案されたソリューションがあまり好きではなかったので、掘り下げ続けました。

おそらくこの時点ですでにご存知でしょうが、あなた (および 10 分前の私) が、xml で定義されているがまだ作成 (インデックス化) されていないフラグメントを処理しようとしていたことに気付きました。

フラグメントメソッドの呼び出しの順序を確認するドキュメントを見て、onCreateView()... の後に他のメソッドでコードを試し、 getFragmentManager() の getSupportFragmentManager() を変更するか、 getSherlockActivity().getSupportFragmentManager( を使用して指定されたソリューションに従ってください。 ) すでに存在するフラグメントを処理できました。

public class MapsFragment extends SherlockFragment {


private SupportMapFragment mSupportMapFragment;
private GoogleMap map;
private Marker spotAMarker;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.maps_fragment, container, false);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    mSupportMapFragment = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map_fragment_test); //THIS ONE
    mSupportMapFragment = (SupportMapFragment) getSherlockActivity().getSupportFragmentManager().findFragmentById(R.id.map_fragment_test); //OR THIS ONE
    if(mSupportMapFragment != null) {
        map = mSupportMapFragment.getMap(); 

        if(map != null) {

            spotAMarker = map.addMarker(new MarkerOptions().position(new LatLng(4.651904,-74.057352)).
                    title(getString(R.string.spot_a_title)).snippet(getString(R.string.spot_a_subtitle)).
                    icon(BitmapDescriptorFactory.fromAsset("images/spot_a.png")));
            spotAMarker.setDraggable(true);

        } else {
            Toast.makeText(this.getActivity(), getString(R.string.no_map_error), Toast.LENGTH_LONG).show();
        }

    } else {
        Toast.makeText(this.getActivity(), "No Map Fragment", Toast.LENGTH_LONG).show();
    }
    super.onActivityCreated(savedInstanceState);
}
}

この問題の回避策はすでにわかっているかもしれませんが、同じ問題で立ち往生している他の人と私の経験を共有したかったのです。

于 2013-07-23T07:08:51.850 に答える