实现TabLayout的onSaveInstanceState和onRestoreInstanceState方法。
首先,在Activity的onCreate方法中,使用ViewPager创建TabLayout和Adapter。
ViewPager viewPager = findViewById(R.id.view_pager);
TabLayout tabLayout = findViewById(R.id.tab_layout);
viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
tabLayout.setupWithViewPager(viewPager);
然后在Activity中实现onSaveInstanceState和onRestoreInstanceState方法,保存和恢复选定的标签。
private int mCurrentSelectedTabPosition = 0;
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("current_tab_position", mCurrentSelectedTabPosition);
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mCurrentSelectedTabPosition = savedInstanceState.getInt("current_tab_position");
tabLayout.getTabAt(mCurrentSelectedTabPosition).select();
}
最后,在ViewPager适配器中,重写getItemPosition方法,确保在屏幕方向改变时返回POSITION_NONE。
class ViewPagerAdapter extends FragmentPagerAdapter {
// ... constructor and other methods ...
@Override
public int getItemPosition(@NonNull Object object) {
// Ensure that POSITION_NONE is returned for fragments that need to be recreated
return POSITION_NONE;
}
}
这样,每次屏幕方向改变时,ViewPager和TabLayout都会被重新创建,而保存和恢复的标签位置也会被正确地切换。