Mur*_*ish 6 android adapter fragment android-recyclerview
我的任务是重新制作一个基本上在工作中的整个应用程序。从本质上讲,该应用程序只是一个包含多种卡片类型的提要(想想 facebook 的更新卡片、照片卡片、OG 内容卡片)等。我将所有网络处理移到一个类中。您调用包含所需请求的方法,传入相关参数和侦听器。进行网络调用,然后将响应传递给侦听器。
目前我有一个 Fragment 类,它使用我的自定义适配器填充回收视图。Fragment 类通过在端点上发出分页请求来与我的网络类交互。例如,当单击特定 viewHolder 卡上的类似图标时,我是否应该有一个与我的片段通信的适配器侦听器?然后我应该让片段制作并管理该网络调用吗?我必须在这里考虑的问题是,如果网络响应失败,我需要取消设置 UI 元素(例如类似图标的颜色)以通知用户他们的请求此时无法完成。取消设置这些元素是回收者视图中该位置的视图持有者的属性。将所有这些视图持有者信息传递回片段只是为了让片段成为与我的网络类交互的唯一类似乎是错误的。
例如,在我的视图持有者元素上设置一个 onClickListener,当点击时更新 UI 并进行调用,然后响应适配器。如果成功保持一切正常,如果失败,则取消设置 UI。这种模式对我来说很有意义,并将单个视图逻辑与片段分离。这样做好吗?很多谷歌搜索让我不相信。这是我的第一个商业应用程序,我想确保我遵循最好的模式。
我的记录片段看起来像这样
onCreate() {
networkListener = new NetworkResponseListener() {
//Process success response based on response code
onSuccess(JSONObject response, responseCode)
onError(Error e, responseCode) // Handle Errors
}
}
//After scroll listener indicates I need to fetch again
NetworkHelper.makeFeedFetch(networkListener, LastId, GET_FEED_REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)
所以本质上,我会在我的适配器类中执行相同类型的网络交互,以执行诸如单击 viewHolder 之类的图标等操作。可以接受吗?
如果您确实想确保遵循最佳模式,则不应从片段中进行 NetworkCalls。片段或活动应该只是显示由其他类(例如 Presenters(如果您遵循 MVP)或 ViewModels(MVVM))提供给它们的数据的查看对象。这些类也不进行直接网络调用。
通常,我们使用存储库模式从远程(Web 服务、远程数据库等)或本地源(本地数据库)获取数据。您的网络类是存储库源的候选者。然后,对于我们的业务逻辑所需的每个操作,我们生成一个用例,如果该用例需要存储库,我们会将存储库注入到我们的用例中。然后我们将此用例注入到 Presenter 或 ViewModel 中。这么多的间接性可能看起来有些过分,但它提供了易于扩展和可测试的代码。回收器视图也是一个视图,因此您也不应该在回收器视图内进行网络调用。
虽然不是精确的解决方案,但您的
在我的视图持有者元素上设置一个 onClickListener,单击时更新 UI 并进行调用,然后响应适配器
海事组织更好。
| 归档时间: |
|
| 查看次数: |
1088 次 |
| 最近记录: |