1

我已经创建了xml-layout包含View类似评论框的文件。getView()我想在方法中多次创建动态布局(评论框) 。如何在getView()方法内部动态创建它?

在内部getview()方法中,我使用代码View多次动态生成特定内容,但它不起作用。请给我建议。

我的适配器代码链接如下:

http://pastebin.com/aAYdPbn9

4

1 回答 1

2

我为您看到了三种方法。正如评论中所讨论的,您的问题的标题具有误导性,所以这就是我的假设:

  • 您有要显示的卡片列表
  • 每张卡片可能有一个评论列表

所以根本的问题是,你有一个二维数据结构,你想使用一维 UI 组件来显示它,在你的例子中是 ListView。

您可以通过以下方式解决您的问题:

  1. 使用 ExpandableListView,其中卡片是父元素,注释是子元素。有关示例,请参见 [1]。

  2. 扁平化数据层次结构。因此,您只有一个项目列表,其中卡片以某种方式被视为您的评论的“标题”或“分隔符”。您需要覆盖 [2],在这种情况下,您的适配器能够返回两个不同的视图。在该getView()方法中,您需要执行以下操作:

    if(list.get(position) instanceOf Card) return getCardView(...); else if(list.get(position) instanceOf Comment) return getCommentView(...);

  3. 将评论动态呈现到卡片视图中的容器中。所以在你的卡片视图的布局文件中使用一个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()

于 2014-12-02T12:43:48.833 回答