我已经创建了xml-layout
个文件,其中包含View
个评论框。我想在getView()
方法中多次动态创建布局(注释框)。如何在getView()
方法中动态创建它?
在getview()
方法中,我使用代码多次动态生成特定View
但它不起作用。请给我一些建议。
我的适配器代码链接如下:
答案 0 :(得分:2)
我看到了三种方法。正如评论中所讨论的那样,你的问题标题具有误导性,所以这就是我的假设:
因此,潜在的问题是,您希望使用一维UI组件显示二维数据结构,在您的情况下的ListView。
您可以通过以下方式解决问题:
使用ExpandableListView,其中卡片是父片段,注释是子元素。有关示例,请参见[1]。
展平您的数据层次结构。因此,您只有一个项目列表,其中卡片以某种方式被视为"标题"或"分隔符"对你的评论。您需要覆盖[2],在这种情况下,您的适配器能够返回两个不同的视图。在getView()
方法中,您需要执行以下操作:
if(list.get(position) instanceOf Card)
return getCardView(...);
else if(list.get(position) instanceOf Comment)
return getCommentView(...);
将注释动态渲染到卡片视图中的容器中。因此,在您的卡片视图的布局文件中,使用ViewGroup,例如一个LinearLayout并给它一个唯一的id,比如" llComments"。有一个单独的布局文件供您评论。然后在当前代码中,您可以膨胀此文件,只需将返回的视图添加到容器(llComments)。我认为这是您正在寻找的解决方案。因此,在您的代码中,执行以下操作:
View commentConvertView = inflater.inflate(R.layout.list_item_comment, ...);
ViewGroup comments = (ViewGroup) convertView.findViewById(R.id.llComments);
comments.removeAllView;
for(list.get(position).getComments()){
//bind the data to commentConvertView
comments.add(commentConvertView);
}
[1] http://www.vogella.com/tutorials/AndroidListView/article.html#expandablelistview_concept [2] http://developer.android.com/reference/android/widget/BaseAdapter.html#getViewTypeCount()