2014-04-01 116 views
0

我有一個創建兩個片段類的主類。其中之一是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> 

但是這個類,不顯示我想要的地圖。只是一個沒有標記的世界地圖。同時點擊此地圖不起作用。

我在另一個類

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()應延長片段創建MapDisplay()片段級,右? 我在做什麼錯?請幫忙!

+0

你試圖擴大MapFragment而不是碎片? –

+0

你這樣做完全錯了,你需要擴展'MapFragment'而不是'Fragment',當你在xml中使用'MapFragment'時,你也不應該使用'SupportMapFragment',並且你沒有通過id得到一個Fragment一個片段,你只在一個活動 – tyczj

+0

@tyczj中做到這一點。檢查編輯的問題。我正在創建片段類 – user1377504

回答

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(); 

你還需要檢查谷歌的可用性發揮這裏沒有顯示的服務。

注:

這個類(MapView類)的用戶必須轉發從ActivityFragment含有此視圖在這個類中對應的所有生命週期方法。特別是,你必須在下列方法轉發:

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

您可以檢查答案@

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