亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用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 關注
  • 486 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號