Как ввести ViewModel с помощью кинжала 2.11 - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть ViewModel , созданный в действии:

mOrdersViewModel = ViewModelProviders.of(this, viewModelFactory).get(OrdersViewModel.class);

Я хотел бы добавить его, как показано ниже:

@Inject OrdersViewModel mOrdersViewModel

Это моя ViewModel:

public class OrdersViewModel extends ViewModel {

private OrdersRepository trelloRepository; ();

@Inject
OrdersViewModel(@NonNull OrdersRepository repository) {
    this.repository = repository;
}

Модуль ViewModelFactory:

@Module
public abstract class ViewModelModule {

@Binds
@IntoMap
@ViewModelKey(OrdersViewModel.class)
abstract ViewModel bindMovieListViewModel(OrdersViewModel ordersViewModel);

@Binds
abstract ViewModelProvider.Factory bindViewModelFactory(ProjectViewModelFactory projectViewModelFactory);

Наконец, я получаю Viewmodel в MainActivity, поэтому:

public class MainActivity extends AppCompatActivity implements HasSupportFragmentInjector, OrderCallback {

@Inject
DispatchingAndroidInjector<Fragment> dispatchingAndroidInjector;

@Inject
public ViewModelProvider.Factory viewModelFactory;

private OrdersViewModel mOrdersViewModel;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    AndroidInjection.inject(this);
    ButterKnife.bind(this);
    mOrdersViewModel = ViewModelProviders.of(this, viewModelFactory)
            .get(OrdersViewModel.class);

1 Ответ

0 голосов
/ 02 октября 2018

Вам не нужен ваш модуль представления модели для класса Component, как компонент приложения?Я не мастер кинжал, поэтому я не уверен в этом.

@Singleton
@Component(modules = [
    ViewModelModule ::class]
)
interface AppComponent {
    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(application: MyApplication): Builder

        fun build(): AppComponent
    }

    fun inject(app: MyApplication)
}
...