在Android中,ListView
和RecyclerView
会在用户滚动以通过不反复膨胀/创建视图对象来提高效率时重复使用视图对象。
这对于任何简单的列表都是直截了当的,但我的用例有点不同。列表中的每个项目都有另一个项目列表,您可以将其视为帖子列表,每个帖子都有一个标签列表。它可以看作如下:
-------------
Post 1
<Tag1> <Tag2> <Tag3>
-------------
Post 2
<Tag4>
-------------
Post 3
<Tag5> <Tag6>
-------------
由于每个帖子都有可变数量的标签,如果我们想在不同的ListView项目中重复使用set标签视图对象,那就不那么简单了。
我目前解决这个问题的方法是,ReusableViewPool
的实现在上述情况下充当可重用标记视图对象的池,其中每个ListView项可以从池中获取视图对象并返回未使用的视图对象回到游泳池。界面如下:
public interface ReusableViewPool {
View get();
void recycle(View v);
}
在ListAdapter
或RecyclerView.Adapter
中,它的作用类似于:
public View getView(int position, View convertView, ViewGroup parent) {
// return extra tag views to the pool
// add missing tag views from the pool
// update the tag views
}
该方法运行良好,但我认为这对于一个常见问题来说非常麻烦。
所以问题是,你们采取什么方法来解决问题?你有什么优雅的解决方案吗?
感谢。
答案 0 :(得分:1)
我过去曾使用过这种技术,我认为这是一种有效的设计。
在您的情况下,我可能会考虑采用不同的方法:使用单个TextView
并制作包含所有标记名称的单个SpannableString
,标记为正确的外观。但很多方面取决于您的实施:
布局/溢出 - 标记部分是否具有某种流布局,或者您是否有水平滚动以将所有标记保留在一行中?
图形 - 你是否在名字之间插入了图标?根据标签类型,它们有不同的颜色或形状吗?
排版 - 根据标签类型,标签名称是否有不同的样式或颜色?
如果您使用某些详细信息更新您的问题,并且更喜欢某些图片/屏幕截图,我可以添加一些示例代码。