Activity-带 Hilt 的片段通信
Activity-Fragment Communication w/ Hilt
我有一个应用只有一个 activity 但有很多片段。我正在使用 ViewModel
进行 Activity-Fragment 通信。最近,我在使用 Hilt,现在我的 activity 和片段之间的通信出现问题。
我的视图模型
@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
}
}
我的主要Activity
@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
。有解决办法吗?
不确定这是否是确切的问题,但是您使用 by activityViewModels<AppViewModel>
而不是 by viewModels
在 fragment
中得到了 ViewModel
编辑:
此外,我刚刚注意到您正在使用 internal
构造函数。尝试只使用 inject constructor
一次,让我知道它是否为您修复了 :)
我有一个应用只有一个 activity 但有很多片段。我正在使用 ViewModel
进行 Activity-Fragment 通信。最近,我在使用 Hilt,现在我的 activity 和片段之间的通信出现问题。
我的视图模型
@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
}
}
我的主要Activity
@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
。有解决办法吗?
不确定这是否是确切的问题,但是您使用 by activityViewModels<AppViewModel>
而不是 by viewModels
fragment
中得到了 ViewModel
编辑:
此外,我刚刚注意到您正在使用 internal
构造函数。尝试只使用 inject constructor
一次,让我知道它是否为您修复了 :)