簡體   English   中英

在AsyncTask回調之后更新基於集合的Widget RemoteViews

[英]Updating collection-based Widget RemoteViews after AsyncTask callback

我處於一種情況,即小部件的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)
}

我的基本思路是,我應該將某些默認布局呈現給RemoteView,然后將其返回到列表中,然后允許網絡操作在后台進行。 然后,我在RemoteViews的同一實例上對AsyncTask的onPostExecute方法進行修改,我認為從理論上講,這應該導致實際的list元素被更新。 但是,盡管運行了onPostExecute並使用其初始布局填充了視圖,但從未設置圖像。 是否有人對如何實現這一目標有任何想法?

事后思考:我嘗試過僅使用TextView並在AsyncTask中設置一些靜態文本,但這也不起作用。

考慮使用ListViewArrayAdapter 這里是有關該主題的一個很好的教程的鏈接。

這個想法是讓您的后台任務更新支持數據,而不是直接查看。 支持數據是項目的集合,代表列表中每個項目的數據。 您的AsyncTask會執行此操作並更新集合中的項目。 然后它將在ArrayAdapter上調用notifyDataSetChanged()使其更新ListView

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM