如何在android中的getview()方法中多次动态创建xml布局?

时间:2014-12-02 12:23:06

标签: android android-view android-xml layout-xml

我已经创建了xml-layout个文件,其中包含View个评论框。我想在getView()方法中多次动态创建布局(注释框)。如何在getView()方法中动态创建它?

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

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

http://pastebin.com/aAYdPbn9

1 个答案:

答案 0 :(得分: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); }

  4. [1] http://www.vogella.com/tutorials/AndroidListView/article.html#expandablelistview_concept [2] http://developer.android.com/reference/android/widget/BaseAdapter.html#getViewTypeCount()