Android ViewModel的职责是仅持有数据,不应该持有视图控制器。ViewModel的目的是将数据保存在配置更改(如屏幕旋转)时保持不变,并且可以供多个Activity或Fragment共享。
以下是一个示例解决方案:
public class MyViewModel extends ViewModel {
private MutableLiveData data;
public LiveData getData() {
if (data == null) {
data = new MutableLiveData<>();
loadData();
}
return data;
}
private void loadData() {
// 在此处加载数据的逻辑
// 可以是从数据库、网络或其他来源获取数据的异步操作
data.setValue("这是一个示例数据");
}
}
在上面的示例中,ViewModel使用LiveData来保存数据,并且在首次访问时通过loadData()方法加载数据。Activity或Fragment可以通过观察ViewModel的LiveData对象来获取数据并更新UI。
例如,在Activity中使用ViewModel:
public class MyActivity extends AppCompatActivity {
private MyViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
viewModel.getData().observe(this, new Observer() {
@Override
public void onChanged(@Nullable String data) {
// 更新UI的逻辑
textView.setText(data);
}
});
}
}
上面的示例中,Activity通过ViewModelProviders来获取ViewModel实例,并观察LiveData对象的变化。当数据发生变化时,观察者的onChanged()方法会被调用,从而更新UI。
请注意,ViewModel不应该包含任何与UI相关的逻辑,它仅负责保存和管理数据。视图控制器(如Activity或Fragment)应该负责处理UI的更新和用户交互。