Mihae Kheel
Mihae Kheel

Reputation: 2651

How to call destroyItem() in ViewPager with PagerAdapter

I have a scenario where in I need to destroy an item on a ViewPager when the app close or call onDestroy() but there is no API to do that in ViewPager that extends a PagerAdapter. destroyItem() only gets called while swiping a page and that depends on how many page to save in mViewPager.setOffscreenPageLimit(int). Is there a way to force the ViewPager to call destroyItem()?

Upvotes: 0

Views: 3145

Answers (1)

Son Truong
Son Truong

Reputation: 14173

I assume your class which extends from PagerAdapter named MyPagerAdapter.

MyPagerAdapter.java

public class MyPageAdapter extends FragmentPagerAdapter {
    ...
}

MainActivity.java

public class MainActivity extends AppCompatActivity {

    ViewPager viewPager;
    MyPageAdapter pagerAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        pagerAdapter = new MyPageAdapter(getSupportFragmentManager());

        viewPager = findViewById(R.id.viewpager);
        viewPager.setAdapter(pagerAdapter);
    }

    @Override
    protected void onDestroy() {
        // For example, call destroyItem when activity get destroyed.
        forceDestroyCurrentItemInViewPager();
        super.onDestroy();
    }

    // Call this method to call destroyItem() for current item in view pager.
    private void forceDestroyCurrentItemInViewPager() {
        int position = viewPager.getCurrentItem();
        Object object = pagerAdapter.getItem(position);
        pagerAdapter.destroyItem(viewPager, position, object);
    }
}

Upvotes: 1

Related Questions