2012-09-26 14 views
5

काम नहीं कर रहा है मैं एक सिंगल फ्रैगमेंट एक्टिविटी के साथ एक साधारण खंड-आधारित अनुप्रयोग विकसित कर रहा हूं। आवेदन की प्रत्येक 'स्क्रीन' एक टुकड़े में निहित है और सभी खंडों को एप्लिकेशन स्टार्टअप पर कंटेनर लेआउट में जोड़ा जाता है।एंड्रॉइड - बैक बटन और खंड बैकस्टैक

// Set up fragments in Main Activity 
fragMan = getFragmentManager(); 
FragmentTransaction ft = fragMan.beginTransaction(); 
ft.add(R.id.fragment_container, settingsFragment); 
ft.add(R.id.fragment_container, mapFragment); 
ft.add(R.id.fragment_container, tracksFragment); 
ft.add(R.id.fragment_container, waypointsFragment); 
ft.commit(); 

संक्रमण वर्तमान में दिखाई देने वाले खंड को छुपाकर, उचित टुकड़े दिखाकर पूरा किए जाते हैं।

ft = fragMan.beginTransaction(); 
ft.show(mapFragment); 
ft.addToBackStack(null); 
ft.commit(); 

यह सब ठीक काम करता है, लेकिन जब वापस बटन दबाया जाता है, आवेदन बाहर निकलता है, चाहे स्क्रीन दिखाई दे रहा है या क्या पिछले लेनदेन वापस ढेर करने के लिए जोड़ा गया है।

मैंने यह सुनिश्चित करने के लिए जांच की है कि बैक स्टैक सही ढंग से रिकॉर्ड जमा कर रहा है और संक्रमण विधियों के कई अलग-अलग बदलावों की कोशिश की है जैसे कि छिपाने/उन्हें दिखाने के बजाय टुकड़ों को प्रतिस्थापित करना, उन्हें चरों में संग्रहीत करने के बजाय टुकड़ों के नए उदाहरण बनाना, इत्यादि। जहां तक ​​मैं कह सकता हूं, मेरा कोड उन सभी ट्यूटोरियल और उदाहरणों से मेल खाता है जो मुझे मिल सकता है, और मैं समान समस्याओं के किसी भी समान प्रश्न/उदाहरण भी नहीं ढूंढ पा रहा हूं, संभवतः मानक कार्यान्वयन 'बस काम करता है' अन्य शामिल हैं।

मुझे संदेह है कि यह मेरे मैनिफेस्ट में एक संपत्ति (जैसे मैंने बहुत अच्छी तरह से जांच की है) या मेरे एप्लिकेशन की स्थापना के तरीके से निहित कुछ स्तर पर आवेदन स्तर पर एक समस्या हो सकती है जो बैक बटन को ठीक से काम करने से रोकती है । मैं मैन्युअल रूप से संक्रमणों को संभालने के लिए बैकप्रेस पर ओवरराइड कर सकता हूं, लेकिन यह एक बहुत बदसूरत कामकाज की तरह लगता है। किसी भी विचार के रूप में यह संभवतः व्यवहार के रूप में क्यों व्यवहार नहीं कर सकता है? जिस तरह से यह नेक्सस 7 पर जेली बीन चल रहा है।

उत्तर

0

मुझे यकीन नहीं है कि यह आपकी समस्या का समाधान करेगा, लेकिन मुझे नहीं लगता कि आपको सभी टुकड़ों को शुरू करने की आवश्यकता है।

मैंने यह भी देखा है (कम से कम संगतता लाइब्रेरी के साथ) कि प्रतिस्थापन विधि बहुत छोटी लगती है, इसलिए पहले मौजूदा खंड को हटाने के लिए सबसे अच्छा है और फिर नया जोड़ें।

/** 
* Changes the detail fragment of this activity. This is how all content is presented in this app. 
* @param fragment 
* @param animated 
* @param addCurrentFragmentToBackStack 
*/ 
private void changeDetailFragment(Fragment fragment,boolean animated,boolean addCurrentFragmentToBackStack) 
{ 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 

     if (animated) 
      transaction.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); 

    Fragment currentFrag = getSupportFragmentManager().findFragmentById(R.id.detailFragment); 


    String fragName = "NONE"; 

    if (currentFrag!=null) 
     fragName = currentFrag.getClass().getSimpleName(); 


    if (currentFrag != null) 
    { 

     transaction.remove(currentFrag); 
    } 


    transaction.add(R.id.detailFragment,fragment); 


    if (addCurrentFragmentToBackStack) 
    { 
     Log.i("APP_NAME","Adding: " + fragName + " to the backstack"); 
     transaction.addToBackStack(null); 
    } 
    else 
    { 
     Log.i("APP_NAME","Not adding: " + fragName + " to the backstack"); 
    } 



    transaction.commit(); 

} 

आशा इस मदद करता है:

यहाँ मैं एक टुकड़ा बदलने के लिए उपयोग करने के लिए कोड का सा है।

2

जांचें कि क्या आप गतिविधि के बजाय FragmentActivity (समर्थन लाइब्रेरी से) का उपयोग कर रहे हैं या नहीं। इससे बैकस्टैक और संक्रमण समस्या होगी।

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