我正在尝试注入activity的视图模型,我想在对话框片段中使用它,如何用Kodein注入它?并使用我之前在其他活动或片段中注入的视图模型。
我尝试过medium的教程这里是教程
https://proandroiddev.com/android-viewmodel-dependency-injection-with-kodein-249f80f083c9
我试图从活动的视图模型访问注入结果,但是当我尝试从对话框片段访问viewModel中的某个对象时,该值为空,与活动的viewModel不同
// This is from Activity
private val viewModelFactory: TriplogisticViewModelFactory by instance()
private val viewModel: TriplogisticViewModel by lazy {
ViewModelProviders
.of(this@ContactDetailBottomSheetDialogFragment, viewModelFactory)
.get(TriplogisticViewModel::class.java)
}Log.e("VIEWMODEL_ACTIVITY", viewModel.mode.get().toString) // result is SENDER_MODE我希望当我访问对话框片段的viewModel中的某个对象时,我会得到与activity的viewModel相同的值
// This is from Dialog Fragment
private val viewModelFactory: TriplogisticViewModelFactory by instance()
private val viewModel: TriplogisticViewModel by lazy {
ViewModelProviders
.of(this@ContactDetailBottomSheetDialogFragment, viewModelFactory)
.get(TriplogisticViewModel::class.java)
}我想要与activity的viewModel对象相同的结果,但我得到的结果为空
Log.e("VIEWMODEL_FRAGMENT", viewModel.mode.get().toString) // result is null发布于 2019-08-29 20:45:16
您必须使用shared ViewModel。使用activity owner实例化ViewModel。看起来像这样:
class SharedViewModel : ViewModel() {
val selected = MutableLiveData<Item>()
fun select(item: Item) {
selected.value = item
}
}
class MasterFragment : Fragment() {
private lateinit var itemSelector: Selector
private lateinit var model: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = activity?.run {
ViewModelProviders.of(this)[SharedViewModel::class.java]
} ?: throw Exception("Invalid Activity")
itemSelector.setOnClickListener { item ->
// Update the UI
}
}
}
class DetailFragment : Fragment() {
private lateinit var model: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = activity?.run {
ViewModelProviders.of(this)[SharedViewModel::class.java]
} ?: throw Exception("Invalid Activity")
model.selected.observe(this, Observer<Item> { item ->
// Update the UI
})
}
}有关详细信息,请单击here
https://stackoverflow.com/questions/57709982
复制相似问题