我已经创建了xml-layout
包含View
类似评论框的文件。getView()
我想在方法中多次创建动态布局(评论框) 。如何在getView()
方法内部动态创建它?
在内部getview()
方法中,我使用代码View
多次动态生成特定内容,但它不起作用。请给我建议。
我的适配器代码链接如下:
我已经创建了xml-layout
包含View
类似评论框的文件。getView()
我想在方法中多次创建动态布局(评论框) 。如何在getView()
方法内部动态创建它?
在内部getview()
方法中,我使用代码View
多次动态生成特定内容,但它不起作用。请给我建议。
我的适配器代码链接如下:
我为您看到了三种方法。正如评论中所讨论的,您的问题的标题具有误导性,所以这就是我的假设:
所以根本的问题是,你有一个二维数据结构,你想使用一维 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()