Reputation: 2651
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
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