0

I have one activity and four fragments in it.the problem is that when i start an activity from any fragment Navigation goes to back first fragment after that.Also when i call onactivityforresult after that navigation comes back to first fragment. MainActivity Code is :

mPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
        private final Fragment[] mFragments = new Fragment[]{
                new RecentPostsFragment(),
                new DonorsFragment(),
                new PlaceActivity(),
                new MyTopPostsFragment(),

        };
        private final String[] mFragmentNames = new String[]{
                getString(R.string.heading_recent),
                getString(R.string.heading_donors),
                getString(R.string.heading_nearby),
                getString(R.string.heading_my_top_posts)
        };

        @Override
        public Fragment getItem(int position) {
            return mFragments[position];
        }

        @Override
        public int getCount() {
            return mFragments.length;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentNames[position];
        }
    };
    // Set up the ViewPager with the sections adapter.
    mViewPager = findViewById(R.id.container);
    mViewPager.setAdapter(mPagerAdapter);
    TabLayout tabLayout = findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(mViewPager);

Fragment code is :

       @Override
public View onCreateView (LayoutInflater inflater, ViewGroup container,
                          Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    View rootView = inflater.inflate(R.layout.fragment_all_posts, container, false);
   // [START create_database_reference]
    mDatabase = FirebaseDatabase.getInstance().getReference();
    // [END create_database_reference]

    mRecycler = rootView.findViewById(R.id.messages_list);
    mRecycler.setHasFixedSize(true);

    return rootView;
}

1 Answers1

0

Try this :-

private void wannaReplaceFragment (Fragment fragment){
  String backState = fragment.getClass().getName();

  FragmentManager fm = getSupportFragmentManager();
  boolean fragmentPopped = fm.popBackStackImmediate (backState, 0);

  if (!fragmentPopped){
    FragmentTransaction ft = fm.beginTransaction();
    ft.replace(R.id.content_frame, fragment);
    ft.addToBackStack(backState);
    ft.commit();
  }
}

when replacing a Fragment, use the popBackStackImmediate() method. Once you can take guide from this link :- How to resume Fragment from BackStack if exists

Abhinav Gupta
  • 2,225
  • 1
  • 14
  • 30