所以,我正在制作这个应用程序。该应用程序解析一个网站,或者更具体地说是一个 vbulletin-board。当我在论坛中解析一个线程时,我已经将其划分,以便当我解析该线程中的每个帖子时,我会在诸如此类的部分中获取帖子的实际内容,并以正确的顺序存储这些部分在一个数组中:
[Plain text]
[Quote from somebody]
[Plain text]
[Another quote]
[Another quote again]
[Some more plain text]
但是,一篇文章可以按照您可能知道的任何顺序排列,并且可以包含比示例中更多或更少的部分,并且它也不必包含引号,或者它可能只是一个或多个引号. 世事皆可能。
当我在我的应用程序中列出帖子时,我使用的是 ListView。然后,此列表视图的每一行将始终包含一个标题,以及前面提到的部分的任意组合。
在谷歌搜索了一下之后,我想这样做的方式是在一个 XML 文件中有一个只有一个布局标签的“基本布局”,每个部分都有一个单独的布局,存储在单独的 XML 文件中,并在我的适配器中每次调用 getView() 时,查看我的“帖子列表”中该位置的帖子,然后循环浏览该特定帖子中的部分,并为每个报价膨胀一个新的“报价布局” - 存储在帖子中的部分,并为帖子中的每个纯文本部分膨胀一个“纯文本布局”。对于每个人,我都会填写属于该帖子的所有内容。
我认为这可行,但可能存在性能问题?据我了解,布局膨胀非常昂贵,而且我也无法回收传入 getView() 的 View,因为它可能添加了一堆部分,而我在另一个 getView 调用中可能不需要这些部分().. 也就是说,如果我对 getView() 和回收有所了解。
这是适配器的 getView() 方法的基本示例:
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
// Inflate the base-layout, which the others are added to.
view = mInflater.inflate(R.layout.forum_post,null);
View header = mInflater.inflate(R.layout.post_header_layout, null);
View message = mInflater.inflate(R.layout.post_text_layout, null);
View quote = mInflater.inflate(R.layout.post_quote_layout, null);
((ViewGroup)view).addView(header);
((ViewGroup)view).addView(message);
((ViewGroup)view).addView(quote);
return view;
}
然后,当我从已保存的帖子列表中提取数据时,根据需要增加更多的报价视图/消息视图。
基本布局只是一个线性布局标签
我膨胀的布局只是添加了一些 TextView 和 ImageView 的 RelativeLayouts。
这段代码产生了这个结果,其中我有一个带有用户名、图片等的标题、一段纯文本和一段引用。不过,这似乎并不能一直正常工作,因为当我刚刚尝试时,列表的副本似乎卡在了背景上,而另一个在它上面滚动了..
http://s14.postimg.org/rizid8q69/view.png
有一个更好的方法吗?因为我想这不是很有效