Android Java创建ViewModel新api
背景
项目使用Java,创建ViewModel发现之前旧api不管用了。不要问为什么项目还要用Java,别问。老项目不让升级。
ViewModel创建新方式
新方式是因为依赖新版本库,其实用旧版本库就回到旧方式了。
依赖:
def lifecycle_version = "2.5.0"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
// Lifecycles only (without ViewModel or LiveData)
implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"
从2.4开始换新方式,当然传递参数更容易了。
public class LauncherViewModel extends ViewModel {
private static final String TAG = "LauncherViewModel";
public static final ViewModelInitializer<LauncherViewModel> initializer = new ViewModelInitializer<>(
LauncherViewModel.class,
creationExtras -> {
return new LauncherViewModel();
}
);
}
传递参数的案例:
也可以参考传递参数,变得简单了
public class MyViewModel extends ViewModel {
public MyViewModel(
MyRepository myRepository,
SavedStateHandle savedStateHandle
) { /* Init ViewModel here */ }
static final ViewModelInitializer<MyViewModel> initializer = new ViewModelInitializer<>(
MyViewModel.class,
creationExtras -> {
MyApplication app = (MyApplication) creationExtras.get(APPLICATION_KEY);
assert app != null;
SavedStateHandle savedStateHandle = createSavedStateHandle(creationExtras);
return new MyViewModel(app.getMyRepository(), savedStateHandle);
}
);
}
初始化:
MyViewModel myViewModel = new ViewModelProvider(
this,
ViewModelProvider.Factory.from(MyViewModel.initializer)
).get(MyViewModel.class);
没错,就是这样,比之前多了2个参数。