【发布时间】:2021-09-27 15:08:53
【问题描述】:
我有一个只有一个 Activity 但有很多 Fragment 的应用。我正在使用ViewModel 进行活动片段通信。最近,我在使用 Hilt,但现在在我的 Activity 和 Fragment 之间进行通信时遇到了问题。
我的视图模型
@HiltViewModel
class AppViewModel @Inject internal constructor(
): ViewModel() {
private var _data = MutableLiveData<String>()
val data: LiveData<String>
get() = _data
fun insertData(dataStr: String) {
_data.value = dataStr
}
}
我的主要活动
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
private val mViewModel: AppViewModel by viewModels()
private var dataString: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mViewModel.data.observe(this, {
dataString = it
})
}
}
我的一个片段
@AndroidEntryPoint
class ReportFragment : Fragment() {
private val reportViewModel: ReportViewModel by viewModels()
private val appViewModel: AppViewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
...
appViewModel.insertData("Hello")
...
}
}
当我运行应用程序时,由于data,我得到了null。有什么办法可以解决这个问题?
【问题讨论】:
-
使用
activityViewModels<AppViewModel>获取共享视图模型。现在您有两个视图模型实例。
标签: android kotlin android-fragments android-activity dagger-hilt