Android : Access Mapview Inside Fragment With ViewPager

后端 未结 2 578
时光取名叫无心
时光取名叫无心 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:14

    To use Google Maps, you have to extend MapActivity, which you didn't do. Check out this example in the docs. In the spirit of maintainability, I wouldn't resort to solutions that use deprecated functionality.

    A more solid solution is to extend MapActivity and copy the missing implementation from FragmentActivity. If you don't want or need backwards compatiblity with older Android versions, just use MapActivity rather than FragmentActivity, which should already include the functionality needed to show Fragments in Android 3.0 and later.


    Edit: here's a project that did it for you.

    0 讨论(0)
  • 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.

    0 讨论(0)
提交回复
热议问题