我想使用listvview完成上述布局。我有几个部分(动态生成)和几个项目。我需要将每个部分封装在自己的背景上,但是我需要用户能够将所有内容滚动为普通的listview,而不仅仅是较小的部分。 (因此,为每个部分实施N-listview将被淘汰)
所以我的问题是你如何建立这样的布局?
答案 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
}
}
希望这会有所帮助......