#android #kotlin #viewmodel #android-livedata #android-lifecycle
#Android #kotlin #viewmodel #android-livedata #android-жизненный цикл
Вопрос:
Я пытаюсь использовать библиотеку ViewModel в своем приложении, я создал класс MainActivityViewModel
, который расширяет класс ViewModel. При попытке создать экземпляр MainActivityViewModel
класса внутри MainActivity
с помощью ViewModelProvider.get(Class)
метода get всегда получается неразрешенная ссылка
MainActivityViewModel
класс:
class MainActivityViewModel: ViewModel() {
private lateinit var mWords: MutableLiveData<List<Word>>
fun getWords(): LiveData<List<Word>>{
return mWords
}
}
MainActivity
класс:
class MainActivity : AppCompatActivity() {
private lateinit var mMainActivityViewModel: MainActivityViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val recycler = findViewById<RecyclerView>(R.id.recycler)
recycler.adapter = RecyclerAdapter(this)
recycler.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
mMainActivityViewModel = ViewModelProvider.get(MainActivityViewModel::class.java)
}
}
Я не уверен, что я здесь делаю не так,
зависимости, используемые для LiveData:
def lifecycle_version = "2.2.0"
def arch_version = "2.1.0"
implementation 'androidx.core:core-ktx:1.3.2'
implementation "androidx.fragment:fragment-ktx:1.2.5"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
// Lifecycles only (without ViewModel or LiveData)
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
Заранее спасибо
Комментарии:
1. Это не статический / сопутствующий метод объекта
2. @Selvin не могли бы вы подробнее рассказать, пожалуйста?
3. О чем? Вам нужен экземпляр этого класса
Ответ №1:
Вам нужно передать контекст, чтобы ViewModel знал, когда его можно удалить.
mMainActivityViewModel = ViewModelProvider(this).get(MainActivityViewModel::class.java)
Ответ №2:
Вам необходимо передать владельца для поставщика viewmodel (Activity / fragment)
mMainActivityViewModel= ViewModelProvider(this).get(MainActivityViewModel::class.java)
В качестве альтернативы вы можете объявить это следующим образом
import androidx.fragment.app.viewModels //use this import
val mMainActivityViewModel: MainActivityViewModel by viewModels() // no need to initialize it again