ImageLevel在自定义数组适配器中的对象上每100毫秒更改一次

时间:2014-08-21 12:05:31

标签: android imageview android-arrayadapter

我有一个使用片段的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是一个坏主意,因为整个过程经常刷新。

任何人都可以帮我一些想法吗?

1 个答案:

答案 0 :(得分:0)

我昨晚解决了这个问题

最终实现使用AsyncTask每100毫秒调用onProgressUpdate(),更新单个类中的图像级别。

单击ImageView时,我将存储在片段类中的全局变量,对此视图的引用,并使用ArrayAdapter从自定义setTag()附加当前对象。

每次getView()方法返回循环视图时,我都会检查ImageView是否包含正在处理的对象标记。如果是,我将其设置为null

如果AsyncTask正在运行,请在onProgressUpdate()中检查我存储ImageView的全局变量是否包含当前处理的对象的标记。如果它包含,那么我更新图像,否则不是。