Get GoogleMap from ViewPager's fragment
android, android-fragments, android-viewpager, google-maps-android-api-2, java
Solution
I've found the solution here, but will post here too for other users to see the code and not get stuck for weeks like I did.
MyPagerAdapter.java
public class MyPagerAdapter extends FragmentPagerAdapter
{
private Context context;
final LatLng YEREVAN = new LatLng(40.181, 44.513);
public MyPagerAdapter(FragmentManager fm, Context context)
{
super(fm);
this.context = context;
}
@Override
public Fragment getItem(int position)
{
switch (position)
{
case 0:
return new MyFragment();
case 1:
return MyMapFragment.newInstance(YEREVAN);
}
return null;
}
@Override
public int getCount()
{
return 2;
}
@Override
public CharSequence getPageTitle(int position)
{
Locale l = Locale.getDefault();
switch (position)
{
case 0:
return context.getString(R.string.start).toUpperCase(l);
case 1:
return context.getString(R.string.map).toUpperCase(l);
}
return null;
}
}
MyMapFragment.java
public class MyMapFragment extends SupportMapFragment
{
private LatLng latLon;
public MyMapFragment()
{
super();
}
public static MyMapFragment newInstance(LatLng position)
{
MyMapFragment frag = new MyMapFragment();
frag.latLon = position;
return frag;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View v = super.onCreateView(inflater, container, savedInstanceState);
initMap();
return v;
}
private void initMap()
{
UiSettings settings = getMap().getUiSettings();
settings.setAllGesturesEnabled(false);
settings.setMyLocationButtonEnabled(false);
getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(latLon, 16));
getMap().addMarker(new MarkerOptions().position(latLon).icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));
}
}
Problem
I'm trying to get `GoogleMap` object from a `Fragment`, which is on the second page of `ViewPager`, whose contents are given with `FragmentPagerAdapter`. My `ViewPager` consist of two pages: an ordinary layout, and a Google map. I can access to the first layout doing this: ``` View tempView = LayoutInflater.from(getApplication()) .inflate(R.layout.start_activity, null); tempTextView = (TextView) tempView.findViewById(R.id.timer); ``` Everything is OK here. But I also want to access Google maps. When the map was in a separate activity, I could get `GoogleMap` object doing this: ``` map=((SupportMapFragment)getSupportFragmentManager() .findFragmentById(R.id.map)).getMap(); ``` But now the above line returns `null` The question is how to get `GoogleMap` object from fragment now? They suggest doing this (some people say this works), but it doesn't take effect for me: ``` map = ((SupportMapFragment) getSupportFragmentManager() .findFragmentByTag("android:switcher:" + R.id.pager + ":1")).getMap(); ``` I'm providing the code here.