【问题标题】:How to implement google map in fragment如何在片段中实现谷歌地图
【发布时间】:2013-10-14 11:29:45
【问题描述】:

我有一个 MainActivity,它有一个带有两个选项卡的 ActionBar,第一个选项卡用于显示传感器数据值,第二个选项卡用于显示地图。 但是我在第二个选项卡的片段中实现地图时遇到问题

MainActivity如下图所示:

public class MainActivity extends Activity
{
private static final String DATA_FRAGMENT_BAR = "Data";
private static final String MAP_FRAGMENT_BAR = "Map";

private DataCollection mDataCollection;

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Config.mContext = this;
    ActionBar actionBar = getActionBar();
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME| ActionBar.DISPLAY_SHOW_CUSTOM);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    ActionBar.Tab dataTab = actionBar.newTab().setText(DATA_FRAGMENT_BAR);
    ActionBar.Tab mapTab = actionBar.newTab().setText(MAP_FRAGMENT_BAR);
    Fragment dataFragment = new FragmentData();
    Fragment mapFragment = new FragmentMap();

    dataTab.setTabListener(new MyTabsListener(dataFragment));
    mapTab.setTabListener(new MyTabsListener(mapFragment));

    actionBar.addTab(dataTab);
    actionBar.addTab(mapTab);
    mDataCollection = DataCollection.getInstance();
}
....
}

TabsListener 如下图所示 公共类 MyTabsListener 实现 ActionBar.TabListener { 私有 Fragment 片段;

public MyTabsListener(Fragment fragment)
{
    this.fragment = fragment;
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
    ft.replace(R.id.fragment_container, fragment);
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
    ft.remove(fragment);
}
}

地图片段类如下所示:

public class FragmentMap extends Fragment
{

MapView mapView;
GoogleMap map;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{
    View v = inflater.inflate(R.layout.fragment_map, 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();
}
}

我在 FragmentMap 类的“mapView.onCreate(savedInstanceState);”行设置了一个断点savedInstanceState 为空,程序会在行后崩溃。

有人可以帮忙吗?提前致谢。

【问题讨论】:

    标签: android android-fragments google-maps-android-api-2


    【解决方案1】:

    Google 发布了 Map API 第 2 版。这为您提供了 MapFragment 和 SupportMapFragment。这允许您在不扩展 MapActivity 的情况下添加地图。

    Google Maps v2 In fragment cashes when clicked twice

    【讨论】:

    • 我已经在问题上添加了 TabsListener 类。我的问题是如果我使用 MapFragment,TabsListener 将不起作用。我有两个选项卡,其中一个选项卡是显示传感器值,所以我使用了 Fragment
    【解决方案2】:

    文档中不是很清楚,但是应该在Fragment.onActivityCreated()中调用MapView.onCreate()方法,而不是在Fragment.onCreate()

    另外,MapView.getMap() 可以返回 null,别忘了检查一下。

    你应该在mapView.onResume()之前调用super.onResume()

    【讨论】:

      猜你喜欢
      • 2016-06-20
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      相关资源
      最近更新 更多