5

ユーザーがアクションバーボタンを押すことで、リストフラグメントとマップフラグメントを切り替えられるようにしたい。現在、それらをうまく交換できますが、フラグメントから実際のGoogleMapオブジェクトを取得しようとすると、nullポインターが発生します。カメラを動かそうとすると、GoogleMapオブジェクトがnullであり、そのコードをスキップしているため、カメラは動きません。これが、実際にxmlからフラグメントを作成することはなく、コードのみを使用しているという事実が原因であるかどうかはわかりません。私のコードは次のとおりです。

public class MapFragment extends SherlockMapFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View root = super.onCreateView(inflater, container, savedInstanceState);
        return root;
    }

}

    @Override
    public void swapFragments() {
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        if (listFragment.isVisible()) {
            sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
            transaction.replace(R.id.root, mapFragment);
        } else {
            sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
            transaction.replace(R.id.root, listFragment);
        }
        transaction.commit();
    }

    @Override
    public void setupMapFragment() {
        mapFragment = new MapFragment();
        mMap = mapFragment.getMap();
        if (mMap != null) {
            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
                    new LatLng(BuzzbabaApplication.latitude,
                            BuzzbabaApplication.longitude), 14));
        }
    }
4

1 に答える 1

3

私もこの問題に遭遇しました。あなたが言ったように、あなたがMapViewを動的にロードしているので、問題は引き起こされます。これは、GoogleMapオブジェクトが読み込まれる前にMapViewの読み込みが完了したことを意味します。

GoogleMapは、基になるマップシステムが読み込まれ、フラグメント内の基になるビューが存在する場合にのみgetMap()を使用して取得できます。

http://developer.android.com/reference/com/google/android/gms/maps/SupportMapFragment.html

私の解決策は、XMLでマップフラグメントを作成することでした。これは、ビューの読み込みが完了すると、GoogleMapオブジェクトも読み込まれ、参照できることを意味します。

于 2013-02-11T03:52:05.157 に答える