在片段中显示地图

时间:2014-04-01 14:31:31

标签: android android-layout android-fragments android-maps-v2

我有一个创建两个片段类的主类。其中之一是MapDisplay()。java

我想在这个班级中显示地图。这是我的MapDisplay()

代码
public class MapDisplay extends Fragment implements OnMapClickListener{
    private GoogleMap googlemap;
    LatLng GAN = new LatLng(34.4305556,74.9250000);

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.maplayout, container, false);


        try
        {
            if(googlemap==null)
            {
                 googlemap=  
            ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.map2)).getMap();
            googlemap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
            googlemap.setMyLocationEnabled(true);
            googlemap.getUiSettings().setMyLocationButtonEnabled(true);
            googlemap.getUiSettings().setZoomControlsEnabled(false);

            }
            if(googlemap!=null)
            {

            Marker m = googlemap.addMarker(new MarkerOptions().position(GAN).title("Gangbal")); 
            m.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
            googlemap.moveCamera(CameraUpdateFactory.newLatLngZoom(GAN, 15));
            googlemap.animateCamera(CameraUpdateFactory.zoomTo(10),2000,null);
            googlemap.setOnMapClickListener(this);
            }
            else
            {
                Toast.makeText(getActivity(), "WELL! HELLO THERE", Toast.LENGTH_LONG).show();
            }       
        } catch(Exception e)
        {
            e.printStackTrace();
        }
        return rootView;
    }

    @Override
    public void onMapClick(LatLng arg0) {
        Bundle args1 = new Bundle();
        args1.putParcelable("LOCATION", GAN);
        Intent a = new Intent(getActivity(),FullScreenMap.class);
        a.putExtra("bundle", args1);
        a.putExtra("title", "Gangbal");
        startActivity(a);

    }
}

这是我的XML布局文件maplayout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <fragment
        android:id="@+id/map2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.MapFragment" />



</RelativeLayout> 

然而,这个班级并没有显示我想要的地图。只是一张没有标记的世界地图。点击此地图也不起作用。

我在另一个类

中创建MapDisplay()片段类
    FragmentPagerAdapter tabadapter = new TabAdapter(getSupportFragmentManager());
ViewPager pager = (ViewPager)findViewById(R.id.tabpager);
pager.setAdapter(tabadapter);

    class TabAdapter extends FragmentPagerAdapter{
public TabAdapter(FragmentManager fm){
    super(fm);
}

@Override
     public Fragment getItem(int m) {
    switch(m)
    {
    case 0:
        return new MapDisplay();
    case 1:
        return new Description();
    }
    return null;
}

    @Override
    public CharSequence getPageTitle(int position) {
        return CONTENT[position % CONTENT.length];
    }

    @Override
    public int getCount() {
      return CONTENT.length;
    }

}

所以我猜MapDisplay()应该扩展Fragment,对吧? 我究竟做错了什么?请帮忙!

1 个答案:

答案 0 :(得分:0)

您需要使用MapView或您的片段应扩展MapFragment

http://developer.android.com/reference/com/google/android/gms/maps/MapView.html

请在maplayout.xml

中加注以下内容
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

<com.google.android.gms.maps.MapView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/map"
    />

</RelativeLayout>

在片段中

View rootView = inflater.inflate(R.layout.maplayout, container, false);
MapView  mapView = (MapView) rootView.findViewById(R.id.map);
GoogleMap map = mapView.getMap();

您还需要检查此处未显示的Google Play服务的可用性。

注意:

此类(MapView)的用户必须将包含此视图的ActivityFragment的所有生命周期方法转发到此类中的相应方法。特别是,您必须转发以下方法:

onCreate(Bundle)
onResume()
onPause()
onDestroy()
onSaveInstanceState()
onLowMemory()

您可以查看答案@

Android - android.view.InflateException: Binary XML file line #8: Error inflating class fragment