我有RecyclerView
(ListView
)。每个列表项(行),都有上传/下载按钮。当用户按下按钮时,它必须上传或下载文件到亚马逊。
使用Kotlin Fuel
框架完成上传或下载过程。 Fuel是一个异步框架。上传或下载过程完成后,我写了一个回调来RecyclerView
适配器。
现在,我必须更改按钮(例如,如果按钮上传,用户点击后,必须上传,上传完成后,应将其更改为下载按钮)。一旦调用回调方法,我搜索列表(我传递给表单列表视图)以查找列表项在RecyclerView
中的位置。
但我不知道如何抓住View Holder
来更新按钮,从上传到下载或下载到上传。我试过,一旦确定了行,就打电话给notifyDataSetChanged
。但它的行为却如此不同,那就是RecyclerView
的第一页。在notifyDataSetChanged
之后,它根本不显示上传/下载按钮。
我是否应该调用notifyItemChanged(position)
以便调用bindViewHolder()
,如果文件不存在则显示下载按钮的逻辑,否则上传按钮。
或者还有其他更好的方法吗?我在单独的文件中定义了FUEL调用以启用可重用性。
答案 0 :(得分:0)
您不应该尝试直接访问ViewHolder
。
RecyclerView
使用了一个flyweight模式,可以将Views重用于其可见项目(而不是为适配器中的每个项目创建一个View,这些项目执行效果不佳并浪费内存。)
相反,请根据您所处的下载状态操纵您的模型,然后拨打notifyItemChanged(position)
,这会导致RecyclerView
致电onBindViewHolder
更新您的项目代表。
您只需要确保您的onBindViewHolder
方法中包含逻辑,以便在模型中查找下载状态以了解要执行的操作。