14

मैं नए GoogleMaps API (v2) के साथ काम कर रहा हूं और खंड के साथ कुछ समस्याएं हैं। मेरे ऐप में दो टुकड़े हैं (मानचित्र, सूची) और उपयोगकर्ता उनके बीच स्विच कर सकते हैं। काम करता है ठीक अब तक इस कोड के साथ:सेविंग मैपफ्रैमेंट (मैप्स v2) एंड्रॉइड में राज्य

if (itemPosition == 0) { 
     getSupportFragmentManager().beginTransaction() 
       .replace(R.id.fragmentpos, myMapFragment).commit(); 
    } else if (itemPosition == 1) { 
     getSupportFragmentManager().beginTransaction() 
       .replace(R.id.fragmentpos, myListFragment).commit(); 
}...... 

जब मैं नक्शे के साथ काम करते हैं, सूची टुकड़ा करने के लिए स्विच और फिर वापस नक्शा टुकड़ा करने के लिए, नक्शे के अंतिम स्थिति सहेजा नहीं गया है। यह वही नहीं है जो मैं चाहता हूं, मैं चाहता हूं कि नक्शा सहेजने वाले राज्य में है क्योंकि मैंने इसे "छोड़ा" .. मैं इसे कैसे पूरा कर सकता हूं? मैं

public void onSaveInstanceState(Bundle outState){ 
    outState.putDouble("LAT", mMap.getCameraPosition().target.latitude); 
    outState.putDouble("LON", mMap.getCameraPosition().target.longitude); 
    outState.putFloat("BEAR", mMap.getCameraPosition().bearing); 
    ... 

}

में कैमरे की स्थिति को बचाने और onCreateView() में बहाल करने की कोशिश की, लेकिन बंडल हमेशा रिक्त है। अगर मैं टुकड़ों को प्रतिस्थापित करता हूं तो onSaveInstanceState को नहीं कहा जाता है।

तो मैं मानचित्र की स्थिति कैसे सहेज सकता हूं?

+0

आप कृपया मेरे सवाल पर एक नजर है और मुझे पता है मैं कहाँ हूँ दे सकते हैं गलत हो रहा है .. यह मेरा सवाल है - http://stackoverflow.com/questions/14124354/android-supportmapfragment-with-google-map-api-2-0-giving-error – Nik

उत्तर

16

मैं इसे कैसे पूरा कर सकता हूं?

आप replace() एक टुकड़ा, पुराने टुकड़ा के विचारों को नष्ट कर रहे हैं, जो बाहर ले जाता है अपने MapView और, शायद, CameraPosition

onSaveInstanceState() ज्यादातर स्क्रीन रोटेशन जैसे कॉन्फ़िगरेशन परिवर्तनों के लिए है। MapFragment और SupportMapFragment पहले से ही CameraPosition (जो, बीटीडब्लू, Parcelable है, तो आप पूरे ऑब्जेक्ट को टुकड़े टुकड़े के बजाय Bundle में सहेज सकते हैं) को बरकरार रख सकते हैं।

आप show() और hide()replace() के बजाय hide() का उपयोग करने पर विचार कर सकते हैं, इसलिए टुकड़ा और उसके विचार घूमते हैं।

+0

मैं शो() का उपयोग करके परेशानी में भाग गया हूं और दो मैपफैगमेंट के साथ छुपाएं()। पहला मैपफ्रैमेंट ठीक से लोड होता है, और मैं इसके साथ बातचीत कर सकता हूं। हालांकि जब मैं टैब स्विच करता हूं, तो दूसरा मैपफ्रैगमेंट उसी मानचित्र दृश्य को पहले के रूप में दिखाता है, और इसके नियंत्रण दृश्य को नियंत्रित नहीं करते हैं। जब मैं पहले मैपफ्रैगमेंट पर वापस स्विच करता हूं, तो नियंत्रण फिर से काम करना शुरू कर देते हैं। मुझे लगता है कि दूसरा मैपफ्रैगमेंट किसी कारण से पहले के सतह दृश्य का उपयोग कर रहा है। कोई संकेत है कि मैं इसे कैसे हल कर सकता हूं? – basilisk

+0

@ बेसिलिस्क: मेरे सिर के ऊपर से, नहीं। माफ़ कीजिये! – CommonsWare

+1

त्वरित उत्तर के लिए धन्यवाद। मैं इसे रखूंगा और अगर मुझे कुछ मिल जाए तो वापस रिपोर्ट करें। – basilisk

0

मैंने onDestroyView() के टुकड़े की विधि में मानचित्र पर CameraPosition के संदर्भ में इस समस्या को हल किया; फिर मानचित्र को पुन: स्थापित करते समय CameraPosition का उपयोग करें।

मेरे समाधान के संदर्भ में यह स्वयं का quirks है, लेकिन अनिवार्य रूप से मेरे पास एक और टुकड़े (जो मैं इसे बदलने के बाद भी लटक रहा हूं) के भीतर एक नक्शा टुकड़ा घोंसला है। तो यह माता पिता टुकड़ा के onActivityCreated() विधि में कोड है:

GoogleMapOptions mapOptions = new GoogleMapOptions(); 
    if(_savedCameraPosition != null) 
    { 
     mapOptions.camera(_savedCameraPosition); 
    } 
    else 
    { 
     // Centre on Australia 
     mapOptions.camera(CameraPosition.fromLatLngZoom(new LatLng(-24.25, 133.25), 15)); 
    } 
    _mapFragment = new SupportMapFragment().newInstance(mapOptions); 

    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
    fragmentTransaction.add(R.id.map_holder, _mapFragment); 
    fragmentTransaction.commit(); 

बाद में एक ही कक्षा में तो मैं है:

@Override 
public void onDestroyView() 
{ 
    super.onDestroyView(); 
    _savedCameraPosition = _map.getCameraPosition(); 
}