0
Aus meiner Sicht ist die ViewModelFactory-Klasse obligatorisch, wenn Ihre ViewModel-Klasse Parameter in ihrem Konstruktor hat. Wie kann ich dann meine ViewModelFactory-Klasse in meiner Aktivität initialisieren, abgesehen von Dependency Injection? Unten ist mein Factory-KlasseInitialize ViewModelFactory
public class ViewModelFactory implements ViewModelProvider.Factory {
private final Map<Class<? extends ViewModel>, Provider<ViewModel>> creators;
public ViewModelFactory(Map<Class<? extends ViewModel>, Provider<ViewModel>> creators) {
this.creators = creators;
}
@SuppressWarnings("unchecked")
@Override
public <T extends ViewModel> T create(Class<T> modelClass) {
Provider<? extends ViewModel> creator = creators.get(modelClass);
if (creator == null) {
for (Map.Entry<Class<? extends ViewModel>, Provider<ViewModel>> entry : creators.entrySet()) {
if (modelClass.isAssignableFrom(entry.getKey())) {
creator = entry.getValue();
break;
}
}
}
if (creator == null) {
throw new IllegalArgumentException("unknown model class " + modelClass);
}
try {
return (T) creator.get();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
Und hier ist meine Aktivitätsklasse
public class RestaurantListActivity extends AppCompatActivity implements LifecycleRegistryOwner {
private LifecycleRegistry lifecycleRegistry = new LifecycleRegistry(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_restaurant_list);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//How do I initialize this?
ViewModelFactory mViewModelFactory;
MyViewModel viewModel = ViewModelProviders.of(this,mViewModelFactory).get(MyViewModel.class);
viewModel.init();
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
}