我有一个创建两个片段类的主类。其中之一是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,对吧? 我究竟做错了什么?请帮忙!
答案 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)的用户必须将包含此视图的Activity
或Fragment
的所有生命周期方法转发到此类中的相应方法。特别是,您必须转发以下方法:
onCreate(Bundle)
onResume()
onPause()
onDestroy()
onSaveInstanceState()
onLowMemory()
您可以查看答案@
Android - android.view.InflateException: Binary XML file line #8: Error inflating class fragment