我有一个ListView
在里面的TabHost
。有一个习惯CursorAdapter
将 4 个不同的视图返回到列表中。4 种类型之一是从 SD 或资产文件夹中提取的图像。最初我从CursorAdapter
自身加载图像,这会导致 UI 线程在加载每个图像时挂起,因此我将代码移动到AsyncTask
.
除了返回非常短的项目列表的情况外,这一切都有效。发生这种情况时,ListView
图像加载后不会重新调整大小,您只能在顶部屏幕的一小部分滚动。
我无法弄清楚如何获得listView
重新布局。在视图本身上调用重新布局和无效是不起作用的。尝试查找 View 的父级返回 null。默认的 ListFragment 布局已经将高度设置为“Match_Parent”。手动将 onCreateView 中的布局设置为所有高度都设置为“Match_Parent”的布局并不能修复它。传入适配器本身来调用notifyDataSetChanged()
只会导致循环并且不会重新调整ListView
.
令人沮丧的是,当我更改选项卡时,视图会在新选项卡被绘制之前正确闪烁。偶尔,当我旋转设备或在选项卡之间轻弹时,它会正确呈现,但大多数时候不会。
出于调试目的,我尝试向 onListItemClick 添加各种重新布局命令,发现调用 ListView.relayout() 有时可以解决问题,但通常不能。
左边是它如何通过 AsyncTask 加载,右边是它如何通过主线程加载器加载。内容在左侧,但您必须滚动,因为列表视图的大小不正确。
我错过了什么?有没有办法让ListView
当前选项卡甚至整个屏幕重绘?