Android : Access Mapview Inside Fragment With ViewPager

后端 未结 2 589
时光取名叫无心
时光取名叫无心 2020-12-18 09:31

I am Using View Pager to Display three Views.

\"Filter\",\"Streets\",\"Around\"

Each View is Defined by Fragment.

WHAT I WA

2条回答
  •  盖世英雄少女心
    2020-12-18 10:15

    You can use LocalActivityManager to host a Activity inside a fragment. It is a deprecated class, but it offers the simplest solution.

    Here is the code for a fragment (MyFilterFragment in your code). YourMapActivity is a basic activity that extends MapActivity.

    public class MapFragment extends Fragment {
        private static final String KEY_STATE_BUNDLE = "localActivityManagerState";
    
        private LocalActivityManager mLocalActivityManager;
    
        protected LocalActivityManager getLocalActivityManager() {
            return mLocalActivityManager;
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            Bundle state = null;
            if (savedInstanceState != null) {
                state = savedInstanceState.getBundle(KEY_STATE_BUNDLE);
            }
    
            mLocalActivityManager = new LocalActivityManager(getActivity(), true);
            mLocalActivityManager.dispatchCreate(state);
        }
    
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
                //This is where you specify you activity class
            Intent i = new Intent(getActivity(), YourMapActivity.class); 
            Window w = mLocalActivityManager.startActivity("tag", i); 
            View currentView=w.getDecorView(); 
            currentView.setVisibility(View.VISIBLE); 
            currentView.setFocusableInTouchMode(true); 
            ((ViewGroup) currentView).setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
            return currentView;
        }
    
        @Override
        public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            outState.putBundle(KEY_STATE_BUNDLE,
                    mLocalActivityManager.saveInstanceState());
        }
    
        @Override
        public void onResume() {
            super.onResume();
            mLocalActivityManager.dispatchResume();
        }
    
        @Override
        public void onPause() {
            super.onPause();
            mLocalActivityManager.dispatchPause(getActivity().isFinishing());
        }
    
        @Override
        public void onStop() {
            super.onStop();
            mLocalActivityManager.dispatchStop();
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            mLocalActivityManager.dispatchDestroy(getActivity().isFinishing());
        }
    }
    

    Edit: Since this answer was posted, Google has released Google Maps Android API with fragment support with an official MapFragment class.

提交回复
热议问题