我对处理大型项目和依赖项非常陌生,但是我正在将一个位于Fragment中的接口移动到它自己的文件中,以便不依赖于最初容纳它的Fragment。
接口MarkerInteractionListener
如下所示
interface MarkerInteractionListener {
fun currentLocation(): Location?
...
}
我的MainActivity通过以下方式实现此接口:
class MainActivity : MarkerInteractionListener, ... {
override fun currentLocation(): Loction? = getLastKnownLocation()
...
}
在将InteractionListener实现回其原始片段时,将按照以下方式完成:
@AndroidEntryPoint
class MyFragment {
private var interactionListener: MarkerInteractionListener? = null
override fun onAttach(context: Context) {
super.onAttach(context)
if (context is MarkerInteractionListener) {
interactionListener = context
} else {
throw RuntimeException("$context must implement MarkerInteractionListener")
}
}
// I can now call interactionListener?.currentLocation()
}
我不知道的是如何将该接口放入一个ViewModel中,该ViewModel将使用接口中的函数。
@HiltViewModel
class PointCreationViewModel @Inject constructor(
private val interactionListener: MarkerInteractionListener,
...
) : ViewModel() {
...
// I want to be able to call interactionListener.currentLocation()
}
这只会得到错误消息
MarkerInteractionListener cannot be provided without an @Provides-annotated method.
我的接口或者我的ViewModel中缺少了什么,不允许我注入接口来使用?这甚至可以被注入吗?有其他的方法吗?
1条答案
按热度按时间ehxuflar1#
必须在AppModule中提供
MarkerInteractionListener