使用ActionBar选项卡获取onCreateView中的Google地图片段

我试图在ActionBar中使用Tabs时检索Google Map片段。 当我加载标签页时,地图加载正常,但我想获得地图对象,所以我可以居中,添加标记等。

有没有办法做到这一点,如果有的话,有人会如此善良,告诉我怎么样?

这是我的标签页面的代码…

我正在使用的具体方法是public static class Map extends Fragment

 public class Page3Activity extends FragmentActivity implements ActionBar.TabListener { final Context context = this; static GoogleMap map; static MapView mMapView; DatabaseHandler db = new DatabaseHandler(context); AppSectionsPagerAdapter mAppSectionsPagerAdapter; ViewPager mViewPager; @SuppressLint("NewApi") public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.page3); // Create the adapter that will return a fragment for each of the three primary sections // of the app. mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager()); ColorDrawable colorDrawable = new ColorDrawable(); final ActionBar actionBar = getActionBar(); colorDrawable.setColor(0xff9ACC00); actionBar.setBackgroundDrawable(colorDrawable); actionBar.setTitle("Road Trip Calculator"); actionBar.setSubtitle("Trip Information"); actionBar.setDisplayShowTitleEnabled(true); actionBar.setDisplayShowHomeEnabled(true); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE ); // Specify that the Home/Up button should not be enabled, since there is no hierarchical // parent. actionBar.setHomeButtonEnabled(false); // Specify that we will be displaying tabs in the action bar. actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // Set up the ViewPager, attaching the adapter and setting up a listener for when the // user swipes between sections. mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(mAppSectionsPagerAdapter); mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { // When swiping between different app sections, select the corresponding tab. // We can also use ActionBar.Tab#select() to do this if we have a reference to the // Tab. actionBar.setSelectedNavigationItem(position); } }); // For each of the sections in the app, add a tab to the action bar. for (int i = 0; i < mAppSectionsPagerAdapter.getCount(); i++) { // Create a tab with text corresponding to the page title defined by the adapter. // Also specify this Activity object, which implements the TabListener interface, as the // listener for when this tab is selected. actionBar.addTab( actionBar.newTab() .setText(mAppSectionsPagerAdapter.getPageTitle(i)) .setTabListener(this)); } } /* * ACTIONBAR TOP BAR CODE */ @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { } @Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { // When the given tab is selected, switch to the corresponding page in the ViewPager. mViewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { } /** * A {@link FragmentPagerAdapter} that returns a fragment corresponding to one of the primary * sections of the app. */ public static class AppSectionsPagerAdapter extends FragmentPagerAdapter { public AppSectionsPagerAdapter(FragmentManager fm) { super(fm); } //Switching between tabs @Override public Fragment getItem(int i) { switch (i) { case 0: return new Map(); case 1: return new Directions(); case 2: return new poiList(); case 3: return new tripInfo(); default: i=i+1; } return null; } @Override public int getCount() { return 4; } @Override public String getPageTitle(int position) { String tabName = ""; if(position == 0) { tabName = "Map"; } else if(position == 1) { tabName = "Directions"; } else if(position == 2) { tabName = "POI List"; } else if(position == 3) { tabName = "Trip Info"; } return tabName; } } /** * Map */ public static class Map extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.maptab, container, false); //I want to be able to do something like this... /* GoogleMap map; SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map1); map = fm.getMap(); map.DOSOMETHING */ return rootView; } } /** * Directions */ public static class Directions extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.directionstab, container, false); ((TextView) rootView.findViewById(android.R.id.text1)).setText( "directions"); return rootView; } } /** * POI List */ public static class poiList extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.poitab, container, false); ((TextView) rootView.findViewById(android.R.id.text1)).setText( "poiList"); return rootView; } } /** * Trip Info */ public static class tripInfo extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.tripinfotab, container, false); ((TextView) rootView.findViewById(android.R.id.text1)).setText( "Trip Info"); return rootView; } } } 

这是我的XML文件(maptab.xml),我有我的地图片段…

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <fragment android:id="@+id/map1" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment" /> </LinearLayout> 

解决了

  public static class Map extends Fragment { MapView mapView; GoogleMap map; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.maptab, container, false); // Gets the MapView from the XML layout and creates it mapView = (MapView) v.findViewById(R.id.mapview); mapView.onCreate(savedInstanceState); // Gets to GoogleMap from the MapView and does initialization stuff map = mapView.getMap(); //map.getUiSettings().setMyLocationButtonEnabled(false); //map.setMyLocationEnabled(true); map.addMarker(new MarkerOptions().position(new LatLng(50.167003,19.383262))); // Needs to call MapsInitializer before doing any CameraUpdateFactory calls try { MapsInitializer.initialize(this.getActivity()); } catch (GooglePlayServicesNotAvailableException e) { e.printStackTrace(); } // Updates the location and zoom of the MapView CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(43.1, -87.9), 10); map.animateCamera(cameraUpdate); return v; } @Override public void onResume() { mapView.onResume(); super.onResume(); } @Override public void onDestroy() { super.onDestroy(); mapView.onDestroy(); } @Override public void onLowMemory() { super.onLowMemory(); mapView.onLowMemory(); } } 

Solutions Collecting From Web of "使用ActionBar选项卡获取onCreateView中的Google地图片段"

您可以使用mViewPager.getItem(0)获取包含Map的片段的引用,然后将其转换为Map片段,并以任何您喜欢的方式使用它。 但是这实际上并不是很好的从外部进行片段devise的devise。 所以我build议你实现所有与map map内部相关的业务逻辑,这样你就不需要解决那种问题了,你发布的所有业务逻辑都封装在一个fragment里面,这是可移植的。