2013-05-28 10 views
7

में मैं अपने ऐप में Google मानचित्र v2 काम करने की कोशिश कर रहा हूं। मैंने कई उदाहरण देखे हैं कि आप एक गतिविधि के अंदर SupportMapFragment कैसे खोल सकते हैं। विचार किया जा रहा है कि अपनी गतिविधि setContentView(R.layout.map_layout); फोन करेगा जहां लाइनों के साथ टुकड़ा करने के लिए map_layout.xml लिंक:Google नक्शे एक actionbarsherlock टैब

android:name="com.google.android.gms.maps.SupportMapFragment" 
     xmlns:map="http://schemas.android.com/apk/res-auto" 

"नाम =" लाइन को प्रभावी ढंग से कहा गया है कि "इस लेआउट प्रकार का एक टुकड़ा 'द्वारा नियंत्रित किया जा रहा है SupportMapFragment ' "।

मेरी जटिलता यह है कि मैं नक्शा को टैब के साथ एक गतिविधि में प्रकट करने का प्रयास कर रहा हूं (एक्शनबार्सहेलॉक के साथ लागू)। इसका मतलब यह है कि जो भी खंड किसी टैब चयन से मेल खाता है उसे टैबलिस्टर को लागू करना होगा। लेकिन SupportMapFragment नहीं करता है। तो अब शायद मैं बहुत की तरह एक नया टुकड़ा बनाने की जरूरत:

public class MyMapFragmentWithTabListener extends SupportMapFragment implements TabListener 
{ 

लेकिन अब मैं सब कैसे MapFragmentWithTabListener की सामग्री को विशेष onCreateView में ... मैं कुछ लेआउट बढ़ा-चढ़ाकर किया जाना चाहिए लिखने के बारे में उलझन में मिल गया है? निश्चित रूप से मैं उदाहरणों से बिल्कुल उसी map_layout.xml को फुला नहीं सकता क्योंकि यह पहले से ही घोषणा करता है कि इसे SupportMapFragment द्वारा नियंत्रित किया जाता है, जबकि इस कार्यान्वयन में इसे MyMapFragmentWithTabListener द्वारा नियंत्रित किया जाना चाहिए - क्या मुझे थोड़ी अलग xml फ़ाइल को फुलाया जाना चाहिए (अगर तो, यह कैसा दिखना चाहिए?) - या मुझे अपना विचार प्रोग्रामेटिक रूप से बनाना चाहिए?

+0

टैबलिस्टर को लागू करने के लिए आपको अपने टुकड़ों की आवश्यकता क्यों है? – AMerle

+0

आप हमेशा कच्चे 'MapView' का उपयोग कर सकते हैं। क्या आपके पास 'SupportMapFragment' का उपयोग करने का कोई कारण है? – Izydorr

+0

मुझे लगता है कि निम्नलिखित पोस्ट आपकी मदद करनी चाहिए। http://stackoverflow.com/questions/13721929/using-actionbarsherlock-with-the-new-supportmapfragment – blganesh101

उत्तर

5

मैंने इसे अभी कुछ अनुप्रयोगों में किया है। SupportMapFragment को विस्तारित करने के बजाय, आप बस अपना खुद का MapFragment बनाएं। इसके अंदर एक नक्शा दृश्य दृश्य के साथ, आप अपना स्वयं का लेआउट ले सकते हैं। कुंजी मैग व्यू में फ्रैगमेंट की जीवन चक्र घटनाओं को रूट करना है, और अपने चाचा को बोब्स करना है।

Heres कुछ उदाहरण कोड:

MapFragment

package com.example.testapplication; 

import java.util.concurrent.TimeUnit; 

import com.google.android.gms.common.GooglePlayServicesNotAvailableException; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapView; 
import com.google.android.gms.maps.MapsInitializer; 


public class TestMapFragment extends Fragment { 

    private MapView mMapView; 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.home_fragment, container, false); 

     mMapView = (MapView) view.findViewById(R.id.mapview); 

     // inflat and return the layout 
     mMapView.onCreate(savedInstanceState); 
     mMapView.onResume();// needed to get the map to display immediately 

     try { 
      MapsInitializer.initialize(getActivity()); 
     } catch (GooglePlayServicesNotAvailableException e) { 
      e.printStackTrace(); 
     } 
     GoogleMap googleMap = mMapView.getMap(); 
     googleMap.getUiSettings().setMyLocationButtonEnabled(true); 
     return view; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setRetainInstance(true); 
    } 

    /* 
    * Using a mapview in a fragment requires you to 'route' 
    * the lifecycle events of the fragment to the mapview 
    */ 
    @Override 
    public void onResume() { 
     super.onResume(); 
     if (null != mMapView) 
      mMapView.onResume(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     if (null != mMapView) 
      mMapView.onPause(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     if (null != mMapView) 
      mMapView.onDestroy(); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     if (null != mMapView) 
      mMapView.onSaveInstanceState(outState); 
    } 

    @Override 
    public void onLowMemory() { 
     super.onLowMemory(); 
     if (null != mMapView) 
      mMapView.onLowMemory(); 
    } 
} 

और लेआउट:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:map="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

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

बॉब मेरा चाचा नहीं है। –

0

आप इस तरह से इस्तेमाल किया जा सकता है।

public class NewActivity extends FragmentActivity { 
private GoogleMap mMap; 
SupportMapFragment mapFragment; 

    @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
       this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
       setContentView(R.layout.activit); 

     mapFragment = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map); 
     if(isGooglePlayServicesIsInstalled(mContext)){ 
      mMap = mapFragment.getMap(); 
      mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
      mMap.getUiSettings().setCompassEnabled(true); 
      mMap.getUiSettings().setZoomControlsEnabled(true); 
     }else{ 
       //display any toast message 
       //Global.Toast("Please First install Google Maps"); 
      } 



public static boolean isGooglePlayServicesIsInstalled(Context context){ 
     int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(context); 
     if (resultCode == ConnectionResult.SUCCESS) 
      return true; 
     else 
      return false; 
    } 

कृपया इसे बाहर की जाँच सभी अनुमति, api कुंजी और हैं.यदि आप तो एक टिप्पणी के रूप में डाल किसी भी त्रुटि लॉग हो रही सब बात आवश्यकता होती है।

संबंधित मुद्दे