2012-12-27 7 views
5

मेरे पास एक खंड गतिविधि है जो बटन क्लिक पर टुकड़े स्विच करती है।
दो टुकड़े कि मैं स्विच कर रहे हैं:मानचित्र खंड से दूसरे टुकड़े में स्विचिंग और पीछे

  1. गूगल मानचित्र एंड्रॉयड वी 2 टुकड़ा
  2. एक पाठ दृश्य

के साथ एक और टुकड़ा इस तरह मैं टुकड़े स्विच है:

public void onClick(View v) { 
    FragmentManager fm = getSupportFragmentManager(); 
    if(tv.getText().toString().equalsIgnoreCase("Click ME!!")){ 
     tv.setText("MAP"); 
     if (fm != null) { 
      if(map == null){  
       map = new Map(); 
      } 
      FragmentTransaction ft = fm.beginTransaction(); 
      ft.replace(R.id.lay_contaier, map); 
      ft.commit(); 

     } 
    } 
    else{ 
     tv.setText("Click ME!!"); 
     if (fm != null){ 
      FragmentTransaction ft = fm.beginTransaction(); 
      ft.replace(R.id.lay_contaier,new empty()); 
      ft.commit(); 

     } 
    } 
} 

यह मेरा मैप्स फ़ैगमेंट कोड

public class Map extends Fragment implements OnMarkerClickListener, OnInfoWindowClickListener, OnMarkerDragListener { 

private static final LatLng PERTH = new LatLng(-31.952854, 115.857342); 
private static final LatLng SYDNEY = new LatLng(-33.87365, 151.20689); 


    private GoogleMap mMap; 

private Marker mPerth; 
    private Marker mSydney; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.activity_main,null); 

     return view; 
    } 

activity_mail.xml

<?xml version="1.0" encoding="utf-8"?> 


<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/map" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
class="com.google.android.gms.maps.SupportMapFragment"/> 

लेकिन हर बार जब मैं मानचित्र को वापस swich खंड आवेदन दुर्घटनाओं। मुझे यह कोड कैसे सही बनाना चाहिए?

उत्तर

0

आप FragmentManager Null बना रहे हैं। fm=null हटाएं। इसके अलावा अन्य लूप में आप दो टुकड़े बदल रहे हैं। एक समय में डबल प्रतिस्थापन मत करो। कॉल करने से पहले(), आप केवल एक प्रतिस्थापन

+0

वे समान लेआउट को प्रतिस्थापित करते हैं R.id.lay_contaier –

+0

@nagaraj - मैंने पोस्ट संपादित किया है, लेकिन यह अभी भी वही है जो ऐप अभी भी आपके द्वारा चिपकाए गए कोड में – zoram

+0

क्रैश करता है, कोई ग़लत नहीं है। आपको गलत – TNR

6

मुझे संदेह है कि यह आपके साथ हो रहा है क्योंकि आपके पास अपने XML लेआउट फ़ाइल में आपका नक्शा खंड परिभाषित है। आदेश में इस तरह से टुकड़े स्वैप करने के लिए है, तो आप कोड में अपने नक्शे, की तरह कुछ का दृष्टांत की आवश्यकता होगी निम्नलिखित:

private void initializeMap() { 

    mMapFragment = SupportMapFragment.newInstance(); 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.add(R.id.fragment_container, mMapFragment, "map"); 
    fragmentTransaction.commit(); 

    handler.post(new Runnable() { 
     @Override 
     public void run() { 
      mMap = mMapFragment.getMap(); 

      mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() { 
       @Override 
       public void onCameraChange(CameraPosition cameraPosition) { 
        // Do something here 
       } 
      }); 
     } 
    }); 
} 

मैंने पाया कि mMapFragment.getMap() अशक्त लौट रहा था, तो यही कारण है कि आप आराम का समय निर्धारित करने की आवश्यकता होगी Handler उदाहरण के माध्यम से सेटअप का। मेरे लेआउट एक्सएमएल निम्नलिखित की तरह दिखता है:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".LauncherActivity"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/fragment_container"> 

    <!-- The fragments will go here --> 
</RelativeLayout> 

<RelativeLayout 
    android:layout_gravity="start" 
    android:layout_height="match_parent" 
    android:layout_width="wrap_content" 
    android:background="@color/drawer_background"> 
... 
</RelativeLayout> 
</android.support.v4.widget.DrawerLayout> 

मुझे आशा है कि इस मदद करता है।

+1

यह अब पूरा करने के लिए एक अप्रचलित तरीका है, क्योंकि Google Play Services 6.5 और उच्चतर 'mMapFragment.getMapAsync()' पद्धति का उपयोग करके मानचित्र को प्रारंभ होने पर बताया जाने वाला तरीका है। – Thorinside