Java Android listView适配器应该有api调用吗

Java Android listView适配器应该有api调用吗,java,android,kotlin,android-adapter,android-mvp,Java,Android,Kotlin,Android Adapter,Android Mvp,您好,我有一个适配器,它显示项目列表以及与setItems,getCount,notifyDataSetChanged相关的所有功能 适配器还通过用例调用api 结构是 适配器->用例->存储库->apiLayer 我知道Fragements和Activity不应该包含对api的调用(在我的实例中是用例) 所以适配器应该有api调用(我的实例中的用例) 谢谢 这是可能的,但从软件设计的角度来看,我不推荐它 适配器的职责是将您的数据连接到视图,并使其可用于列表视图/回收视图。适配器不应具有任何其他

您好,我有一个适配器,它显示项目列表以及与
setItems
getCount
notifyDataSetChanged
相关的所有功能

适配器还通过用例调用api

结构是

适配器->用例->存储库->apiLayer

我知道Fragements和Activity不应该包含对api的调用(在我的实例中是用例)

所以适配器应该有api调用(我的实例中的用例)

谢谢
这是可能的,但从软件设计的角度来看,我不推荐它

适配器
的职责是将您的
数据
连接到
视图
,并使其可用于
列表视图
/
回收视图
。适配器不应具有任何其他依赖项(知识)。这也将使它对变化更具鲁棒性

<>请注意,只有活动/片段与演示者对话,并将演示者的结果委托给适配器。 这也将使(演示者的)单元测试更容易

class YourActivity:Activity(){
私人val演示者:YourPresenter=/。。。
重写fun onCreate(){
val适配器:YourAdapter=YourAdapter()
recyclerView.setAdapter(适配器)
val data=presenter.getData()
适配器。提交(数据)
}
}
为YourPresenter初始化(私有值useCase:useCase:Presenter(){
fun getData():列表{
返回useCase.fetchData()
}
}

这是可能的,但当发生配置更改(如设备旋转)时,会重新创建活动/片段(以及适配器)你应该考虑使用一个ViewModel,从活动/片段中得到一个USECK等,然后你可以观察VIEW模型的变化并更新适配器。这样的配置改变不会导致数据丢失/重新获取数据。因此,在适配器中使用HAV用例是不理想的,但是它也不是一个坏主意。如果你能接受它的缺点,我肯定能做到。不过我不建议你这么做。让ViewModel更新适配器(通过活动)在我看来,这是一个更好的关注点分离。对我来说,适配器只是用来连接数据和视图的。它不应该做更多的事情。因此,这更多的是一个好的设计问题。考虑到可测试性,你能很容易地对适配器进行单元测试吗?将它放在viewModel中可以使测试更容易。某种程度上,或者更好,只有活动/框架nt与演示者对话:
presenter.fetchData()
,然后使用该数据更新适配器。因此适配器除了数据和视图之外不知道任何其他内容。对适配器的依赖性越小(知识越少),适配器的更改能力就越强。好的,谢谢@ChristianB非常有用