2016-09-25 7 views
8

मैंने अपने फ्रैगमेंट में कस्टम कीबोर्ड जोड़ा है और अब मैं दबाए जाने पर क्लोजिंग कीबोर्ड को कार्यान्वित करना चाहता हूं।बैकस्टैक पर बैकस्टैक एंटर्री को कैसे जोड़ा जाए यदि

class CustomKeyboard 
{ 
    public void init(Context context) { 
     //... 

     FragmentManager fragmentManager = ((Activity) context).getFragmentManager(); 
     boolean fragmentPopped = fragmentManager.popBackStackImmediate(TAG, 0); 
     if (!fragmentPopped) { 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.addToBackStack(TAG); 
      fragmentTransaction.commit(); 
     } 
    } 
} 

समस्या init कॉल हर बार स्क्रीन को घुमाने क्योंकि मैं public void onActivityCreated(final Bundle savedInstanceState)

fragmentPopped=false हर बार में CustomKeyboard बनाते हैं, तो CustomKeyboard एक से अधिक समय BackStack में जोड़ा जा सकता है।

मेरा प्रश्न: जोड़ने के लिए
क्या यह संभव है नहीं getBackStackEntryCount() विधि का उपयोग कर के बिना मौजूद BackStackEntry BackStack के लिए?

+0

https://developer.android.com/ संदर्भ/एंड्रॉइड/ऐप/FragmentManager.html # POP_BACK_STACK_INCLUSIVE –

+0

आप चाहते हैं कि आपका प्रश्न सीधे उत्तर दें या एकाधिक कॉल की अपनी समस्या को हल करना चाहते हैं? – Elltz

+0

@Elltz मैं चाहता हूं कि मेरा प्रश्न सीधे उत्तर दें –

उत्तर

2

नीचे दिए गए कोड को आज़माएं।

public void init(Context context) { 

    FragmentManager fragmentManager = ((Activity) context).getFragmentManager(); 
    boolean fragmentPopped = fragmentManager.popBackStack(TAG, 0); 
    if (!fragmentPopped) { 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.addToBackStack(TAG); 
     fragmentTransaction.commit(); 
    } 
} 
2

आशा इस कोड को आपकी सहायता करने

@Override 
public void replaceFragment (Fragment fragment, String backStackTag){ 
    AppAndroidUtils.hideKeyboard(this); 

    if(StringUtils.isEmpty(backStackTag)) 
     backStackTag = fragment.getClass().getName(); 
    FragmentManager manager = getSupportFragmentManager(); 
    boolean fragmentPopped = manager.popBackStackImmediate(backStackTag, 0); 

    if (!fragmentPopped && manager.findFragmentByTag(backStackTag) == null){ 
     FragmentTransaction ft = manager.beginTransaction(); 
     ft.replace(R.id.frame_container, fragment, backStackTag); 
     ft.addToBackStack(backStackTag); 
     ft.commit(); 
    } 

} 
2

आप कुछ इस तरह कर सकते हैं:

 FragmentManager fm= getSupportFragmentManager(); 

    if(fm!=null && getSupportFragmentManager().getFragments()!=null) { 

     boolean fragmentPopped = fm.popBackStackImmediate(TAG, 0); 

     if (!fragmentPopped && getSupportFragmentManager().getFragments().size() == 0) { 

      FragmentTransaction ft = fm.beginTransaction(); 
      ft.addToBackStack(TAG); 
      ft.commit(); 
     } 
    } 

इसके अलावा आप इस तरह पहली बार अपने Backstack साफ कर सकते हैं और फिर अपने टुकड़ा की जगह:

private void cleanBackStack() { 
    FragmentManager fm = getSupportFragmentManager(); 
    if (fm != null && fm.getFragments() != null) { 
     if (fm.getFragments().size() > 1) { 

      for (int entry = 0; entry < fm.getFragments().size(); entry++) { 
       fm.popBackStackImmediate(); 
      } 
     } else if (fm.getFragments().size()==1){ 

      fm.popBackStack(); 
     }else if(fm.getFragments().size()==0){ 
       //REPLACE YOUR FRAGMENT 
     } 
    } 
} 
संबंधित मुद्दे