0

I use ActionBar and use inner TabListener in the Activity:

public static class TabListener<T extends Fragment> 
implements ActionBar.TabListener{

                   private final Activity myActivity;
                   private final String myTag;
                   private final Class<T> myClass;

                   public TabListener(Activity activity, String tag, Class<T> cls) {
                       myActivity = activity;
                       myTag = tag;
                       myClass = cls;
                   }

                @Override
                public void onTabReselected(Tab tab, FragmentTransaction ft) {

                    // User selected the already selected tab. Usually do nothing.

                }

                @Override
                public void onTabSelected(Tab tab, FragmentTransaction ft) {
                    Fragment myFragment = myActivity.getFragmentManager().findFragmentByTag(myTag);

                       // Check if the fragment is already initialized
                             if (myFragment == null) {
                                 // If not, instantiate and add it to the activity
                                 myFragment = Fragment.instantiate(myActivity, myClass.getName());
                                 myActivity.setTitle( myClass.getName());
                                 ft.add(android.R.id.content, myFragment, myTag);
                             } else {
                                 // If it exists, simply attach it in order to show it
                                 myActivity.setTitle( myFragment.getClass().getName());
                                 ft.attach(myFragment);
                             }
                             Log.i("current fragment", myFragment.getClass().toString());

                }

                @Override
                public void onTabUnselected(Tab tab, FragmentTransaction ft) {
                      Fragment myFragment = myActivity.getFragmentManager().findFragmentByTag(myTag);

                       if (myFragment != null) {
                                 // Detach the fragment, because another one is being attached
                                 ft.detach(myFragment);
                             }

                }
        }

I need to switch another Fragment at the current tab from DialogFragment . I do it in common way like this:

 Fragment newFragment = new ContactsArchiveFragment();
                fragmentTransaction.replace(android.R.id.content, newFragment);
                fragmentTransaction.addToBackStack(null);
                fragmentTransaction.commit();

But when I switch to another tab, my current Fragment(which was switched to) is not detached and displays above. How can I solve this?

Rikki Tikki Tavi
  • 3,089
  • 5
  • 43
  • 81

2 Answers2

0

Try This..

  public void addFragment(Fragment fragment, boolean addToBackStack,
                int transition) {
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(android.R.id.content, fragment);
            ft.setTransition(transition);
            if (addToBackStack)
                ft.addToBackStack(null);
            ft.commit();
        }

You can use true first time, then change it to false

addFragment(newfragment, true, FragmentTransaction.TRANSIT_NONE);
selva_pollachi
  • 4,147
  • 4
  • 29
  • 42
0

I solved my issue, using this. Here's the solution:

    public static class TabListener<T extends Fragment> 
    implements ActionBar.TabListener{

                       private final Activity myActivity;
                       private final String myTag;
                       private final Class<T> myClass;
                    private Fragment mFragment;

                       public TabListener(Activity activity, String tag, Class<T> cls) {
                           myActivity = activity;
                           myTag = tag;
                           myClass = cls;
                       }

                    @Override
                    public void onTabReselected(Tab tab, FragmentTransaction ft) {

                        // User selected the already selected tab. Usually do nothing.

                    }

                    @Override
                    public void onTabSelected(Tab tab, FragmentTransaction ft) {
//                      Fragment myFragment = myActivity.getFragmentManager().findFragmentByTag(myTag);
                        Fragment preInitializedFragment = (Fragment) myActivity.getFragmentManager().findFragmentByTag(myTag);

                        if (preInitializedFragment == null) {
                            mFragment = (Fragment) Fragment.instantiate(myActivity, myClass.getName());
                            ft.add(android.R.id.content, mFragment, myTag);
                        } else {
                            ft.attach(preInitializedFragment);
                        }

                    }

                    @Override
                    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
                          Fragment preInitializedFragment = myActivity.getFragmentManager().findFragmentByTag(myTag);

                          if (preInitializedFragment != null) {
                                ft.detach(preInitializedFragment);
                            } else if (mFragment != null) {
                                ft.detach(mFragment);
                            }

                    }
            }
Community
  • 1
  • 1
Rikki Tikki Tavi
  • 3,089
  • 5
  • 43
  • 81