为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕后森 2019-12-18 16:14:19
我正在尝试将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;@Overridepublic 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;}@Overridepublic void onStart() {    super.onStart();    mToggleMapa.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            if (!isMapVisible) {                openMap();            } else {                closeMap();            }            isMapVisible = !isMapVisible;        }    });}
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

谢谢,发现这很有帮助。我正在发布我稍作修改的解决方案,因为当地图准备好时,我可以更清楚地告诉父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();

    }

    ...

}

希望它可以帮助某人。


查看完整回答
反对 回复 2019-12-18
  • 3 回答
  • 0 关注
  • 452 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信