要在Activity旋转时保留当前Fragment,可以使用ViewModel来保存Fragment的状态。ViewModel在Activity重新创建时会被保留,因此可以通过ViewModel来保存当前Fragment的信息。
以下是一个示例的解决方法:
public class MyViewModel extends ViewModel {
private Fragment currentFragment;
public Fragment getCurrentFragment() {
return currentFragment;
}
public void setCurrentFragment(Fragment currentFragment) {
this.currentFragment = currentFragment;
}
}
public class MainActivity extends AppCompatActivity {
private MyViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
if (savedInstanceState == null) {
// 创建并显示默认的Fragment
Fragment fragment = new MyFragment();
viewModel.setCurrentFragment(fragment);
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, fragment)
.commit();
} else {
// 恢复之前保存的Fragment
Fragment fragment = viewModel.getCurrentFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, fragment)
.commit();
}
}
}
这样,在Activity重新创建时,会检查是否有保存的Fragment信息,如果有,则恢复之前的Fragment,否则创建并显示默认的Fragment。
请注意,以上示例代码仅演示了如何使用ViewModel来保存和恢复Fragment的信息。实际应用中,您可能需要根据您的具体需求进行修改。