I am Using View Pager to Display three Views.
\"Filter\",\"Streets\",\"Around\"
Each View is Defined by Fragment.
WHAT I WA
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 Fragment
s in Android 3.0 and later.
Edit: here's a project that did it for you.
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.