How restart Fragment in my Activity - Android

11,621

Solution 1

You can reload your fragment with this:

FragmentTransaction tr = getFragmentManager().beginTransaction();
tr.replace(R.id.fragment_layout, instanceFragment);
tr.commit()

Being instanceFragment the instance of the fragment you wanna to reload and fragment_layout the FrameLayout component in your activity layout XML file.

Solution 2

For Android SDK >= 21 you may use this approach:
In your Activity class add function restartFragment

fun restartFragment(fragmentId: Int) {
    val currentFragment = this.supportFragmentManager.findFragmentById(fragmentId)!!

    this.supportFragmentManager.beginTransaction()
        .detach(currentFragment)
        .commit()
    this.supportFragmentManager.beginTransaction()
        .attach(currentFragment)
        .commit()
}

In your Fragment call

(requireActivity() as <YourActivityClassName>).restartFragment(id, R.id.<your_fragment_id>)

Personally I took R.id.<your_fragment_id> from my nav_graph as R.id.settings_fragment and as MainActivity

Share:
11,621
Arman Download
Author by

Arman Download

Updated on June 04, 2022

Comments

  • Arman Download
    Arman Download almost 2 years

    I have an activity that have 3 fragment inside. I need restart a first fragment in my activity with click on Button.

    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFrag(new HomeFragment(), "Home");
    adapter.addFrag(new CategoryFragment(), "Category");
    adapter.addFrag(new FilterFragment(), "Filter");
    viewPager.setAdapter(adapter);
    

    I test the following way but doesn't work and show error: refresh fragment at reload

    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.setNextAnim(int)' on a null object reference