使用Maps API v2以编程方式初始化MapFragment

我正在尝试将MapFragment添加到当前的Fragment中。嵌套片段的使用仅限于FragmentTransactions,您不能在布局中使用xml标记。另外,我希望在用户按下按钮时将其添加到主片段中。因此,getInstance()当用户按下该按钮并将其添加到正确的位置时,我将以编程方式创建MapFragment 。正确显示,到目前为止效果很好。


问题在于,在附加MapFragment之后,我需要获取GoogleMap 放置Marker的引用,但是该getMap()方法返回null(因为onCreateView()尚未调用该片段)。


我看了看演示示例代码,我发现他们使用的初始化MapFragment的解决方案onCreate(),并获得在参考GoogleMap的onResume(),之后onCreateView()被调用。


我需要在MapFragment初始化之后立即获取对GoogleMap的引用,因为我希望用户能够使用按钮显示或隐藏地图。我知道一个可能的解决方案是如上所述在地图的开头创建Map,然后设置其可见性消失,但是我希望该地图默认情况下处于关闭状态,因此如果用户未明确要求,则不会占用用户的带宽为了它。


我尝试使用MapsInitializer,但也不起作用。我有点卡住。有任何想法吗?到目前为止,这是我的测试代码:


public class ParadaInfoFragment extends BaseDBFragment {

// BaseDBFragment is just a SherlockFragment with custom utility methods.


private static final String MAP_FRAGMENT_TAG = "map";

private GoogleMap mMap;

private SupportMapFragment mMapFragment;

private TextView mToggleMapa;

private boolean isMapVisible = false;


@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_parada_info, container, false);

    mToggleMapa = (TextView) v.findViewById(R.id.parada_info_map_button);

    return v;

}


@Override

public void onStart() {

    super.onStart();

    mToggleMapa.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            if (!isMapVisible) {

                openMap();

            } else {

                closeMap();

            }

            isMapVisible = !isMapVisible;

        }

    });

}

慕后森
浏览 417回答 3
3回答

开心每一天1111

谢谢,发现这很有帮助。我正在发布我稍作修改的解决方案,因为当地图准备好时,我可以更清楚地告诉父Fragment。此方法还可以与saveInstanceState / restoreInstanceState周期一起使用。public class CustomMapFragment extends SupportMapFragment {    private static final String LOG_TAG = "CustomMapFragment";    public CustomMapFragment() {        super();    }    public static CustomMapFragment newInstance() {        CustomMapFragment fragment = new CustomMapFragment();        return fragment;    }    @Override    public View onCreateView(LayoutInflater arg0, ViewGroup arg1, Bundle arg2) {        View v = super.onCreateView(arg0, arg1, arg2);        Fragment fragment = getParentFragment();        if (fragment != null && fragment instanceof OnMapReadyListener) {            ((OnMapReadyListener) fragment).onMapReady();        }        return v;    }    /**     * Listener interface to tell when the map is ready     */    public static interface OnMapReadyListener {        void onMapReady();    }}用作嵌套片段:-public class ParentFragment extends Fragment implements OnMapReadyListener {    ...    mMapFragment = CustomMapFragment.newInstance();    getChildFragmentManager().beginTransaction().replace(R.id.mapContainer, mMapFragment).commit();    @Override    public void onMapReady() {        mMap = mMapFragment.getMap();    }    ...}希望它可以帮助某人。
打开App,查看更多内容
随时随地看视频慕课网APP