在Android中保留ViewModel的数据有多种方法,以下是其中的一种解决方法的示例代码:
// 在ViewModel类中使用SavedStateHandle来存储和获取数据
public class MyViewModel extends ViewModel {
private SavedStateHandle savedStateHandle;
public MyViewModel(SavedStateHandle savedStateHandle) {
this.savedStateHandle = savedStateHandle;
}
public void saveData(String data) {
savedStateHandle.set("key", data);
}
public String getData() {
return savedStateHandle.get("key");
}
}
// 在Activity或Fragment中使用ViewModelProvider获取ViewModel实例,并保存和获取数据
public class MyActivity extends AppCompatActivity {
private MyViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewModelProvider viewModelProvider = new ViewModelProvider(this);
viewModel = viewModelProvider.get(MyViewModel.class);
// 保存数据
viewModel.saveData("Hello World");
// 获取数据
String data = viewModel.getData();
Log.d("MyActivity", "Data: " + data);
}
}
// 在ViewModel类中使用onCleared方法来保存和获取数据
public class MyViewModel extends ViewModel {
private String data;
public void saveData(String data) {
this.data = data;
}
public String getData() {
return data;
}
@Override
protected void onCleared() {
// 在ViewModel被清除时保存数据
// 可以将数据保存到SharedPreferences或其他持久化存储中
super.onCleared();
}
}
// 在Activity或Fragment中使用ViewModelProvider获取ViewModel实例,并保存和获取数据
public class MyActivity extends AppCompatActivity {
private MyViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewModelProvider viewModelProvider = new ViewModelProvider(this);
viewModel = viewModelProvider.get(MyViewModel.class);
// 保存数据
viewModel.saveData("Hello World");
// 获取数据
String data = viewModel.getData();
Log.d("MyActivity", "Data: " + data);
}
@Override
protected void onDestroy() {
// 在Activity销毁时调用ViewModel的onCleared方法,可以在此处保存数据
super.onDestroy();
}
}
这些示例代码演示了如何保留ViewModel的数据,你可以根据自己的需求选择适合的方法。