[android] ViewPagerにGoogleMapFragmentを組み込み
目次
ViewPagerにGoogleMapFragmentを組み込み
Googleで紹介されているFragmentActivityを継承したGoogleMapの実装方法では
Fragmentしか乗せられないViewPagerに実装できない。
その為FragmentをネストしてViewPagerに乗せる
SupportMapFragmentにgetChildFragmentManagerを実装していることに注目
googleMapFragment.java
public class googleMapFragment extends Fragment implements OnMapReadyCallback { private GoogleMap mMap; public static googleMapFragment newInstance() { googleMapFragment fragment = new googleMapFragment(); return fragment; } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_main_map, null, false); SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); return view; } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; // Add a marker in Sydney and move the camera LatLng sydney = new LatLng(-34, 151); mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); } }
fragment_main_map.xml
MainActivity.java
public class MainActivity extends AppCompatActivity { private SectionsPagerAdapter mSectionsPagerAdapter; private ViewPager viewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); // Set up the ViewPager with the sections adapter. mViewPager = (ViewPager) findViewById(R.id.container); mViewPager.setAdapter(mSectionsPagerAdapter); TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.setupWithViewPager(mViewPager); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); return super.onOptionsItemSelected(item); } public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position) { case 0: return googleMapFragment.newInstance(); case 1: return googleMapFragment.newInstance(); case 2: return googleMapFragment.newInstance(); default: return null; } } @Override public int getCount() { return 3; } @Override public CharSequence getPageTitle(int position) { return null; } } }