我有一个使用片段的Activity。该片段包含一个自定义数组适配器,可显示超过190个元素。
每个元素都包含一个ImageView
,其中我定义了一个包含14个图像的Level list drawable资源
- 0 - >玩
- 1-12 - >纺纱国
- 13 - >停止
当用户点击ImageView
时,状态从0-> 1更改,并且启动IntetnService以在后台执行下载。下载完成后,IntentService
会发送LocalBroadcastMessage
。保存片段的活动有一个接收器,它调用片段中的方法来更新ArrayAdapter
。通过在notifyDataSetChanged()
上调用ArrayAdapter
来完成更新。重新创建视图时,ImageView
的状态将更改为13.为实现此目的,我在Singleton中存储与用户单击的ArrayAdapter
元素关联的对象的id。 ImageView
。在getView()
方法中,如果重新创建存储对象的布局,则ImageView
的图像级别设置为13.先前下载的媒体文件已完成播放,另一个LocalBroadcastMessage和整个过程再次触发将图像级别更改为0。
我希望实现一种机制来循环ImageView
的状态,同时IntentService
每100毫秒运行1到12。必须仅针对用户点击ArrayAdapter
的{{1}}中的元素执行此操作。如果ImageView
尚未完成,则当用户滚动离开元素然后向后滚动时,图像必须旋转。
每次用户点击IntentService
并且图片级别从0-> 1更改时,我尝试通过启动AsyncTask
来执行此操作。从ImageView
方法调用notifyDataSetChanged()
上的ArrayAdapter
是一个坏主意,因为整个过程经常刷新。
任何人都可以帮我一些想法吗?
答案 0 :(得分:0)
我昨晚解决了这个问题
最终实现使用AsyncTask
每100毫秒调用onProgressUpdate()
,更新单个类中的图像级别。
单击ImageView
时,我将存储在片段类中的全局变量,对此视图的引用,并使用ArrayAdapter
从自定义setTag()
附加当前对象。
每次getView()
方法返回循环视图时,我都会检查ImageView
是否包含正在处理的对象标记。如果是,我将其设置为null
。
如果AsyncTask
正在运行,请在onProgressUpdate()
中检查我存储ImageView
的全局变量是否包含当前处理的对象的标记。如果它包含,那么我更新图像,否则不是。