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 一次,让我知道它是否为您修复了 :)