0

I have a 8 fragments and one activity..based on the user selection i am replacing the content with the appropriate fragments. Here I am adding the fragments into back stack.This is working fine..When tapping back button fragments are displaying one by one from back stack..but these fragments are again reloading ..How do I resume the fragment without recreating?

I have tried like this

       public <T> void attachFragmentToContentView(int fragmentId) {
        Fragment fragment = null;
        switch (fragmentId) {
        case Constants.ID_FRAGMENT_DEVICE_THEME:
            fragment = DeviceThemeFragment.createInstance();
            break;
        case Constants.ID_FRAGMENT_CORPORATION_INFO:
            fragment = CorporationInformationFragment.createInstance();
            break;
        case Constants.ID_FRAGMENT_NEW_OFFERS:
            fragment = new NewOffersFragment<T>();
            break;
        case Constants.ID_FRAGMENT_ACHIEVEMENTS:
            fragment = new CompanyAchievementFragment<T>();
            break;
        case Constants.ID_FRAGMENT_CLIENTELE:
            fragment = new ClienteleFragment<T>();
            break;
        case Constants.ID_FRAGMENT_ONGOING_SCHEMES:
            fragment = new OnGoingSchemesFragment<T>();
            break;
        case Constants.ID_FRAGMENT_TRACKING:
            fragment = new TrackingFragment<T>();
            break;
        case Constants.ID_FRAGMENT_ENQUIRY_FORM:
            fragment = new EnquiryFragment<T>();
            break;
        case Constants.ID_FRAGMENT_NEWS_EVENTS:
            fragment = new NewsEventsFragment<T>();
            break;

        default:
            comingSoon();
            break;
        }
        if (fragment != null) {
            FragmentTransaction fragmentTransaction = fragmentManager
                    .beginTransaction();
            fragmentTransaction.replace(R.id.content, fragment,
                    String.valueOf(fragmentId));
//          
            fragmentManager.addOnBackStackChangedListener(this);
            fragmentTransaction.addToBackStack(String.valueOf(fragmentId));
            fragmentTransaction.commit();

        }
    }

Iam facing problem while popping from back stack. I would be thankful if anybody resolve my problem

Thanks, Chaitanya.K

Jitesh Upadhyay
  • 5,244
  • 2
  • 25
  • 43
Chaitu
  • 907
  • 2
  • 13
  • 27
  • This isn't a problem indeed. Just consider saving your fragment's state in the onSaveInstanceState() and reloading it based on this state. http://stackoverflow.com/questions/6787071/android-fragment-how-to-save-states-of-views-in-a-fragment-when-another-fragmen – Atul O Holic Feb 25 '14 at 10:11
  • I have tried to store onSavedInstanceState in every fragment. but that onSavedInstanceState is not calling..Have you any idea? – Chaitu Feb 25 '14 at 10:12
  • See the link above and http://www.intertech.com/Blog/saving-and-retrieving-android-instance-state-part-2/ and http://emuneee.com/blog/2013/01/07/saving-fragment-states/ – Atul O Holic Feb 25 '14 at 10:15

3 Answers3

0

try this..

Fragment fragment = null;
        switch (position) {
        case 0:
            fragment = new HomePage();
            break;
        case 1:
            fragment = new SecondPage();
            break;
        case 2:
            fragment = new ThirdPage();
            break;
        case 3:
            fragment = new SettingsPage();
            break;
        default:
            break;
        }

        if (fragment != null) {
            FragmentManager fm = getSupportFragmentManager();
            FragmentTransaction transaction = fm.beginTransaction().replace(R.id.frame_container, fragment);
            transaction.commit();

You should have a constructor in all the fragments. like this at least.

public HomePage(){}
Vinoth
  • 81
  • 5
  • 1
    But I need to traverse back when user tap on back.So I must add fragments to back stack.right!!! – Chaitu Feb 25 '14 at 10:19
0

I think you might have to use attach/detach instead but first, try searching for an existing instance of the fragment before creating a new instance:

    Fragment fragment = fragmentManager.findFragmentByTag(String.valueOf(fragmentId));
    if (fragment != null) {
        FragmentTransaction fragmentTransaction = fragmentManager
                .beginTransaction();
        fragmentTransaction.attach(R.id.content, fragment);

        fragmentManager.addOnBackStackChangedListener(this);
        fragmentTransaction.addToBackStack(String.valueOf(fragmentId));
        fragmentTransaction.commit();

    }
    else {
       // contents of your switch statement setting fragment

        if (fragment != null) {
            FragmentTransaction fragmentTransaction = fragmentManager
                    .beginTransaction();
            fragmentTransaction.replace(R.id.content, fragment,
                    String.valueOf(fragmentId));

            fragmentManager.addOnBackStackChangedListener(this);
            fragmentTransaction.addToBackStack(String.valueOf(fragmentId));
            fragmentTransaction.commit();

        }
    }
cYrixmorten
  • 7,110
  • 3
  • 25
  • 33
  • 1
    According to user selection the fragments are loading fine.but these fragments are reloading/recreating when traverse back by using the back button. – Chaitu Feb 25 '14 at 10:22
0

If i got your point. this will help you..

@Override
public void onBackPressed(){
  if (getSupportFragmentManager().getBackStackEntryCount() == 1){
    finish();
  }
  else {
    super.onBackPressed();
  }
}

try this.

Vinoth
  • 81
  • 5