Я использовал SharedViewModel для передачи данных из Activity во фрагмент
Как и в Activity, существует EditText , основанный на том, что я пишу в EditText, RecyclerView фрагмента должен отображать отфильтрованные данные.
ViewModel:
fun onSearchChanged(s: CharSequence, start: Int, before: Int, count: Int) {
mutableChangedText.postValue(s.toString())
}
fun getSearchChangedText(): MutableLiveData<String> {
return mutableChangedText
}
Фрагмент: Я наблюдаю данные во фрагменте, используя метод ниже, но здесь он не соблюдает
private lateinit var sharedVM: SharedViewModel
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
fragmentBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_list_passwords, container, false)
sharedVM = ViewModelProvider(this).get(SharedViewModel::class.java)
fragmentBinding.appListViewModel = sharedVM
observeSearchText()
return fragmentListPasswordBinding.root
}
private fun observeSearchText() {
sharedVM.getSearchChangedText().observe(viewLifecycleOwner, Observer {
Log.d(TAG, "value = $it")
})
}
MainActivity: Если я использую тот же код в классе Activity, где EditText, он работает нормально. private lateinit var sharedVM: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
sharedVM = ViewModelProvider(this).get(SharedViewModel::class.java)
activityMainBinding.appListViewModel = sharedVM
observeSearchText()
}
private fun observeSearchText() {
sharedVM.getSearchChangedText().observe(this, Observer {
Log.d(TAG,"value = $it")
})
}
Согласно ответу @Hein Htet Aung, если я изменю это на активность, я получаю ошибку ниже времени компиляции
Ответ:
Благодаря Hein Htet Aung
Я получил решение, используя приведенный ниже код во фрагменте
sharedVM = ViewModelProvider(activity as MainActivity).get(SharedViewModel::class.java)