在ViewPager2中不保存片段状态的解决方法是使用FragmentStateAdapter代替FragmentPagerAdapter,并设置setSaveState(false)来禁用状态保存。以下是一个示例代码:
// 创建自定义的 FragmentStateAdapter
class MyPagerAdapter extends FragmentStateAdapter {
private List fragmentList;
public MyPagerAdapter(@NonNull Fragment fragment, List fragmentList) {
super(fragment);
this.fragmentList = fragmentList;
}
@NonNull
@Override
public Fragment createFragment(int position) {
return fragmentList.get(position);
}
@Override
public int getItemCount() {
return fragmentList.size();
}
}
// 在Activity中使用 ViewPager2 和自定义的 FragmentStateAdapter
public class MainActivity extends AppCompatActivity {
private ViewPager2 viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化 ViewPager2
viewPager = findViewById(R.id.viewPager);
// 创建 Fragment 列表
List fragmentList = new ArrayList<>();
fragmentList.add(new Fragment1());
fragmentList.add(new Fragment2());
fragmentList.add(new Fragment3());
// 创建自定义的 FragmentStateAdapter
MyPagerAdapter pagerAdapter = new MyPagerAdapter(this, fragmentList);
// 设置 Adapter 和禁用保存状态
viewPager.setAdapter(pagerAdapter);
viewPager.setSaveEnabled(false);
}
}
在上述示例中,我们创建了一个自定义的FragmentStateAdapter,并将其与ViewPager2关联。然后,我们禁用了ViewPager2的状态保存功能,通过调用setSaveEnabled(false)方法。这样,ViewPager2将不会保存Fragment的状态,每次都会重新创建新的Fragment实例。