Создание пользовательских параметров android viewmodel class - PullRequest
0 голосов
/ 30 июня 2018

Это создаст MyViewModel объект с параметрами по умолчанию или нулем.

MyActivity

ViewModelProviders.of(this)
                .get(MyViewModel::class.java)

Как я могу создать, если MyViewModel класс имеет конструкторы пользовательских параметров?

MyViewModel

class MyViewModel(context: Application,
                        private val repository: MistakesRepository) : AndroidViewModel(context) {


    val showLoading = ObservableBoolean(false)
    val liveItems = MutableLiveData<List<Mistake>>()

    fun loadAllMistakes(forceLoad: Boolean) {

    }

}

После поиска нескольких сообщений в блоге это можно сделать с помощью пользовательского фабричного объекта. Но почему нет документации об этой странице разработчика? Или я что-то здесь упускаю?

Ответы [ 2 ]

0 голосов
/ 30 июня 2018
ViewModelProviders.of(this, object : ViewModelProvider.Factory {
            override fun <T : ViewModel?> create(modelClass: Class<T>): T {
                @Suppress("UNCHECKED_CAST")
                return MyViewModel(applicationContext, mistakesRepository) as T
            }
        })[MyViewModel::class.java]
0 голосов
/ 30 июня 2018

Я могу помочь вам в JAVA. Надеюсь, вы сможете перейти в kotlin лучше, чем я.

class MyViewModelFactory implements ViewModelProvider.Factory {

    private final Context context;
    private final MistakesRepository repository;

    @Inject
    public MyViewModelFactory(Context context, MistakesRepository repository) {
       this.context = context;
       this.repository = repository;
    }

    @Override
    public MyViewModel create(Class modelClass) {
        return new MyViewModel(context, repository);
    }
}

Тогда, наконец, использовать:

@Inject MyViewModelFactory factory;
...
MyViewModel createViewModel() {
    return ViewModelProviders.of(this,factory)
                             .get(MyViewModel.class);
}

Попытка в котлине

class MyViewModelFactory @Inject constructor(val context: Context, val repository: MistakesRepository) : ViewModelProvider.Factory {

        override fun create(modelClass: Class): MyViewModel {
            return MyViewModel(context, repository);
        }
    }

@Inject lateinit var factory : MyViewModelFactory
...
fun createViewModel() : MyViewModel {
    return ViewModelProviders.of(this,factory)
                             .get(MyViewModel::java.class);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...