在Android中,ViewModel是用于存储和管理与UI相关的数据的类。当屏幕旋转时,Activity或Fragment会重新创建,但ViewModel的实例必须保持不变。为了确保ViewModel在屏幕旋转时绑定到相同的Activity或Fragment,可以使用ViewModelProviders类提供的ViewModelProvider方式。
首先,在Activity或Fragment中创建一个ViewModelProvider实例:
ViewModelProvider viewModelProvider = new ViewModelProvider(this);
然后,在获取ViewModel时使用ViewModelProvider的get方法:
MyViewModel myViewModel = viewModelProvider.get(MyViewModel.class);
在上面的代码中,MyViewModel是自定义的ViewModel类。ViewModelProvider会检查是否已经存在与当前Activity或Fragment关联的ViewModel实例。如果已经存在,它将返回现有的实例;如果不存在,它将创建一个新的实例。
在Activity或Fragment中使用ViewModelProvider获取ViewModel的示例代码如下:
public class MyActivity extends AppCompatActivity {
private MyViewModel myViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
ViewModelProvider viewModelProvider = new ViewModelProvider(this);
myViewModel = viewModelProvider.get(MyViewModel.class);
// 使用myViewModel进行操作
}
}
通过这种方式,无论屏幕如何旋转,ViewModel实例都会保持不变,并且能够与相应的Activity或Fragment绑定。
需要注意的是,为了使ViewModelProvider能够正确地管理ViewModel的生命周期,Activity或Fragment必须继承自ViewModelStoreOwner接口。