我的Widget的ListView元素依赖于通过AsyncTask通过网络获取的内容。我的RemoteViewsFactory实现中的getViewAt代码如下:
val preRendered = RemoteViews(context.packageName, R.layout.list_item_layout)
MyAsyncTask(preRendered).execute()
return preRendered
AsyncTask被定义为内部类
private inner class MyAsyncTask(val remoteViews: RemoteViews) : AsyncTask<Void, Void, Bitmap>()
{
override fun doInBackground(vararg nothing: Void): Bitmap = <fetch image from internet synchronously>
override fun onPostExecute(result: Bitmap) = remoteViews.setImageViewBitmap(R.id.imageview, result)
}
我的基本思路是我应该对RemoteViews执行一些默认布局的渲染并返回要插入到列表中的内容,然后允许网络操作在后台进行。然后我在同一个RemoteViews实例上对AsyncTask的onPostExecute方法进行修改,我认为理论上应该导致实际的list元素被更新。但是,尽管运行onPostExecute并且视图使用其初始布局填充,但从不设置图像。有没有人对如何实现这一点有任何想法?
事后的想法:我尝试过使用TextView并在AsyncTask中设置一些静态文本,但这也无效。
答案 0 :(得分:0)
考虑使用for sock in socks {
if !counts.contains(sock) {
counts[sock] = 1
} else {
counts[sock] = counts[sock] + 1
}
}
和ListView
。 Here是指向该主题的一个好教程的链接。
我们的想法是让您的后台任务更新后备数据,而不是直接查看您的视图。支持数据是表示列表中每个项目的数据的项目集合。您的ArrayAdapter
会做这件事并更新集合中的项目。然后,它会调用AsyncTask
上的notifyDataSetChanged()
来更新ArrayAdapter
。