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非常有用