0

I want to use the same fragment and replace contents with a reset function but when returning the same fragment for each tab I get following error :

Can't change tag of fragment FragmentRank

Here's my code :

class pagerAdapter extends FragmentPagerAdapter {

String[] tabs = {"1", "2", "3"};
FragmentRank rank;

public pagerAdapter(FragmentManager fm) {
    super(fm);
    rank = FragmentRank.newInstance();
}

@Override
public CharSequence getPageTitle(int position) {
    return tabs[position];
}

@Override
public int getCount() {
    return 3;
}

@Override
public Fragment getItem(int position) {

    return rank;


}


}

Any ideas?

logcat :

java.lang.IllegalStateException: Can't change tag of fragment FragmentRank{529c3b00 id=0x7f080044 android:switcher:2131230788:0}: was android:switcher:2131230788:0 now android:switcher:2131230788:1
                    at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:398)
                    at android.support.v4.app.BackStackRecord.add(BackStackRecord.java:389)
                    at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:99)
                    at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:832)
                    at android.support.v4.view.ViewPager.populate(ViewPager.java:1048)
                    at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
                    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
                    at android.view.View.measure(View.java:16497)
                    at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
                    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
                    at android.view.View.measure(View.java:16497)
                    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
                    at android.view.View.measure(View.java:16497)
                    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                    at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
                    at android.view.View.measure(View.java:16497)
                    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
                    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
                    at android.view.View.measure(View.java:16497)
                    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1912)
                    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109)
                    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291)
                    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
                    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600)
                    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
                    at android.view.Choreographer.doCallbacks(Choreographer.java:574)
                    at android.view.Choreographer.doFrame(Choreographer.java:544)
                    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
                    at android.os.Handler.handleCallback(Handler.java:733)
                    at android.os.Handler.dispatchMessage(Handler.java:95)
                    at android.os.Looper.loop(Looper.java:136)
                    at android.app.ActivityThread.main(ActivityThread.java:5001)
                    at java.lang.reflect.Method.invokeNative(Native Method)
                    at java.lang.reflect.Method.invoke(Method.java:515)
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
                    at dalvik.system.NativeStart.main(Native Method)
David
  • 840
  • 6
  • 17
  • 37

1 Answers1

1

Each Page in FragmentPager needs to have one distinct Fragment, or else it can't recreate it on config changes. It uses an internal naming convention to identify each fragment and recreates it. So return FragmentRank.newInstance() on each call of getItem().

If you want more control over your Fragments inside your adapter, use this approach: https://stackoverflow.com/a/15261142/535762

With this you can reattach any state information you may have. It would be better to do that inside onResume() of your Fragments

Community
  • 1
  • 1
einschnaehkeee
  • 1,858
  • 2
  • 17
  • 20