ListView包含每个部分的部分和自定义背景

时间:2013-06-07 20:25:27

标签: android listview

Layout

我想使用listvview完成上述布局。我有几个部分(动态生成)和几个项目。我需要将每个部分封装在自己的背景上,但是我需要用户能够将所有内容滚动为普通的listview,而不仅仅是较小的部分。 (因此,为每个部分实施N-listview将被淘汰)

所以我的问题是你如何建立这样的布局?

3 个答案:

答案 0 :(得分:1)

这并不困难。我用ListView做了这个,它正在处理回收。 在这段代码中,它将为绿色和红色之间的每个列表项切换颜色。

@Overrid
public int getItemViewType(int position) {
        if((position % 2) == 0) {
            return TYPE_GREEN;
        } else {
            return TYPE_RED;;
}

@Override
public int getViewTypeCount() {
    return numberOfColors;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    int type = getItemViewType(position);

    if (type == TYPE_RED) {
        convertView = mInflater.inflate(R.layout.list_item_red,
                null);
    } else if (type == TYPE_GREEN) {
        convertView = mInflater.inflate(R.layout.list_item_green,
                null);
    }

}

答案 1 :(得分:0)

最简单的解决方案是根本不使用ListView。使用一系列LinearLayout容器,手动添加项目。请记住,此选项不会使用View回收,对长列表而言将是性能灾难。

如果性能问题妨碍了LinearLayouts,您必须对列表项进行一些巧妙的操作才能实现目标。通过设置列表中所有项目的背景以使用类似的背景,然后在内部视图中偏移项目的内容,可以使部分看起来具有连续的背景。您可以填充部分的第一个项目的顶部,部分中最后一个项目的底部以及所有项目的边。为了保持这种错觉,请删除ListView分隔符,并在列表项中的视图中设置一个。一旦你开始与列表交互,选择器看起来很有趣,所以你可能想要自定义它。

                                  ---
|-------------------------|        |
|#########################|        |
|##|-------------------|##|        |
|##|                   |##|  Actual list item
|##|                   |##|        |
|##|                   |##|        |
|##|-------------------|##|       ---
|##|                   |##|        |
|##|                   |##|  Actual list item
|##|                   |##|        |
|##|-------------------|##|       ---
|##|                   |##|        |
|##|                   |##|        |
|##|                   |##|  Actual list item
|##|-------------------|##|        |
|#########################|        |
|-------------------------|        |
                                  ---  
|-------------------------|        |
|@@@@@@@@@@@@@@@@@@@@@@@@@|        |
|@@|-------------------|@@|        |
|@@|                   |@@|  Actual list item
|@@|                   |@@|        |
|@@|                   |@@|        |
|@@|-------------------|@@|       ---
|@@|                   |@@|        |
|@@|                   |@@|        |
|@@|                   |@@|  Actual list item
|@@|-------------------|@@|        |
|@@@@@@@@@@@@@@@@@@@@@@@@@|        |
|-------------------------|        |
                                  ---  

答案 2 :(得分:0)

For ur ref , I have implemented the same thing in the following application

这是我实施的方式, 1)将所有数据保存在Arraylist中。 例如:

private String HEADING_TAG="heading";
private String ITEM_TAG="item" ;
ArrayList<String> data=
new ArrayList<String>();
data.add( HEADING_TAG+"@selector");
data.add( ITEM_TAG+ "@item1")
/* in the above line "heading" is a tag, just to know that the 
following listitem is a heading.
"@" is a separator using which we wl split the string later in 
the adapter*/

2)现在实现一个自定义适配器并覆盖getView()方法。 注意:将列表的长度传递给适配器。 3)访问getView()方法里面的数据列表,一个叫做的争论  position将在getView方法中可用。使用该变量 迭代列表。 例如:

getView(....,....,int pos,....)
{
String temp[]= data.get(position).split("@");
if(temp[0].equals( HEADING_TAG ))
{
// change the background to the layout which u r inflating.
// Set the heading to the textview or what ever view u defined
//the layout
}
else if (temp[1].equals( ITEM_TAG ) )
{
// set the item to the view
}
}

希望这会有所帮助......