2015-03-19 4 views
14

मेरे पास दो गतिविधियां हैं ए और बी गतिविधि ए के पास नक्शा है फ्रैगमेंट और मैं इसे बैकस्टैक में जोड़ रहा हूं। जब मैं वापस बी से एक्टविटी ए से वापस आ जाता हूं, तो मैं चाहता हूं कि टुकड़ा उसी स्थिति में दिखाना जैसा मैंने छोड़ा था। । लेकिन getFragmentManager() getBackStackEntryCount() मेरे 0. लौटा रहा है यहाँ मेरी कोड है:getBackStackEntryCount() हमेशा addToBackStack जोड़ने और निष्पादित करने के बाद भी 0 लौटाता है PendingTransactions()

MapFragment mMapFragment = MapFragment.newInstance(); 
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
    mMapFragment.getMapAsync(this); 
    fragmentTransaction.replace(R.id.container, mMapFragment); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
    getFragmentManager().executePendingTransactions(); 

जब गतिविधि B से वापस आ रहा है, मैं इस getBackStackEntryCount() की संख्या पता करने के लिए है:

System.out.println("Number of entries in backstack "+ getFragmentManager().getBackStackEntryCount()); 

जो मुझे दिखा रहा है 0.

अग्रिम धन्यवाद।

उत्तर

1

इस प्रयास करें:

fragmentTransaction.replac(R.id.container, mMapFragment); 
इस के लिए

:

MapFragment mMapFragment = MapFragment.newInstance(); 
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
    mMapFragment.getMapAsync(this); 
    fragmentTransaction.add(R.id.container, mMapFragment); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
    getFragmentManager().executePendingTransactions(); 

मैं इस लाइन को बदल दिया है

fragmentTransaction.add(R.id.container, mMapFragment); 

सुंदर यकीन है कि अगर आप एक टुकड़ा तो backstack में अपनी नहीं की जगह :)

+0

पर धन्यवाद करने की आवश्यकता है लेकिन अभी भी 0 दिखा रहा है। – user3555350

+0

'add()' के विरुद्ध 'प्रतिस्थापन() 'को स्विच करने के अलावा आपको' .addToBackStack (null)' –

40

मुझे एक ही समस्या थी, मेरे मामले में getFragmentManager().getBackStackEntryCount() हमेशा शून्य लौटा रहा था।

Fragment fragment = new MyFragment(); 
// note getSupportFragmentManager() instead getFragmentManager() 
FragmentManager fragmentManager = getSupportFragmentManager(); 
fragmentManager.beginTransaction() 
.replace(R.id.frame, fragment) 
.addToBackStack(null) 
.commit(); 

fragmentManager.executePendingTransactions(); 

और मैं getFragmentManager()backStackEntryCount है, जो हमेशा शून्य रिटर्न की जाँच के लिए जाने पर (एक और टुकड़ा प्रबंधक का उपयोग कर रहा है):

@Override 
public void onBackPressed() { 
    if (getFragmentManager().getBackStackEntryCount() > 0) { 
     getFragmentManager().popBackStack();    
    } 
} 

बजाय

मेरे समस्या मैं समर्थन टुकड़े का उपयोग कर लिया है था getSupportFragmentManager, जो सही संख्या देता है:

@Override 
public void onBackPressed() { 
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) { 
     getSupportFragmentManager().popBackStack();   
    } 
} 
+0

एस जोड़ने की भी आवश्यकता है, यह वास्तव में काम करता है जब मैंने getFragmentManager() को SupportFragmentManager() प्राप्त करने के लिए बदल दिया। उत्तर के लिए धन्यवाद .. –

+0

लेकिन क्यों? मैं सामान्य टुकड़े प्रबंधक के साथ सामान्य टुकड़ों का उपयोग कर रहा हूं, मैं कैसे जान सकता हूं कि एफएम - सामान्य या समर्थन के मामले में क्या उपयोग है? – Anton

+0

यह निर्भर करता है कि आप आयात करते हैं android.support.v4.app.FragmentManager या android.app.FragmentManager – Neonigma

0

मेरे पास एक और समाधान है (चारों ओर घूमना) Fragments का पता लगाने के लिए, क्योंकि मेरे उदाहरण में FM.getBackStackEntryCount() भी 0 और FM.executPendingTransactions काम नहीं किया।

तो यहाँ कैसे मैं एक नया टुकड़ा जोड़ने है:

getFragmentManager().beginTransaction() 
         .add(contextLayout.getId(), toolFragment, FRAG_TOOL_TAG) 
         .setCustomAnimations(R.anim.tool_frag_in, R.anim.tool_frag_out) 
         .commit(); 

और यहाँ मैं कैसे इसे हटाने है:

Fragment prevTool = getFragmentManager().findFragmentByTag(FRAG_TOOL_TAG); 
     if(prevTool != null){ 
      getFragmentManager().beginTransaction().remove(prevTool).commit(); 
     }else { 
      intentCANCELED(); 
     } 

Orginally here की स्थापना की।

2

मुझे भी इसी तरह की समस्या है। this answer के लिए धन्यवाद मैं अपने गतिविधि में नीचे दिए गए कोड बनाने के लिए, टुकड़ा के बजाय, और इस समाधान ठीक काम:

getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { 
     @Override 
     public void onBackStackChanged() { 
      Log.d("ovech", "back stack changed"); 
      Log.d("ovech", "back stack count = " + getSupportFragmentManager().getBackStackEntryCount()); 
      if(getSupportFragmentManager().getBackStackEntryCount()>0) { 
       toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp); 
      } else { 
       toolbar.setNavigationIcon(null); 
       Log.d("ovech", "hello without icon"); 
      } 
      toolbar.invalidate(); 
     } 
    }); 
0

बस getSupportFragmentManager() साथ getFragmentManager() बदलें। सरल समाधान यह मेरे लिए काम कर रहा है। आपको इसे अपनी गतिविधि

+0

आप कुछ भी नहीं दे रहे हैं जो पहले से ही अन्य उत्तरों में लिखे गए नहीं हैं –

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