android listview header,Android ListView标头

下面是我如何做到这一点,键getItemViewType和getViewTypeCount的Adapter类。getViewTypeCount返回列表中我们有多少种类型的项目,在这种情况下我们有一个标题项和一个事件项,所以有两个。 getItemViewType应该返回View我们在输入中的类型position。

那么Android将带你传递正确类型的护理View中convertView自动。

这里代码的结果如下:

首先,我们有一个接口,我们的两个列表项类型将实现public interface Item {

public int getViewType();

public View getView(LayoutInflater inflater, View convertView);}

然后我们有一个接收列表的适配器 Itempublic class TwoTextArrayAdapter extends ArrayAdapter {

private LayoutInflater mInflater;

public enum RowType {

LIST_ITEM, HEADER_ITEM    }

public TwoTextArrayAdapter(Context context, List items) {

super(context, 0, items);

mInflater = LayoutInflater.from(context);

}

@Override

public int getViewTypeCount() {

return RowType.values().length;

}

@Override

public int getItemViewType(int position) {

return getItem(position).getViewType();

}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {

return getItem(position).getView(mInflater, convertView);}

编辑 更好的性能..滚动时可以注意到private static final int TYPE_ITEM = 0; private static final int TYPE_SEPARATOR = 1; public View getView(int position, View convertView, ViewGroup parent)  {

ViewHolder holder = null;

int rowType = getItemViewType(position);

View View;

if (convertView == null) {

holder = new ViewHolder();

switch (rowType) {

case TYPE_ITEM:

convertView = mInflater.inflate(R.layout.task_details_row, null);

holder.View=getItem(position).getView(mInflater, convertView);

break;

case TYPE_SEPARATOR:

convertView = mInflater.inflate(R.layout.task_detail_header, null);

holder.View=getItem(position).getView(mInflater, convertView);

break;

}

convertView.setTag(holder);

}

else

{

holder = (ViewHolder) convertView.getTag();

}

return convertView; } public static class ViewHolder {

public  View View; } }

然后我们对工具进行分类Item并扩展正确的布局。在你的情况下,你会有一个Header类和一个ListItem类。public class Header implements Item {

private final String         name;

public Header(String name) {

this.name = name;

}

@Override

public int getViewType() {

return RowType.HEADER_ITEM.ordinal();

}

@Override

public View getView(LayoutInflater inflater, View convertView) {

View view;

if (convertView == null) {

view = (View) inflater.inflate(R.layout.header, null);

// Do some initialization

} else {

view = convertView;

}

TextView text = (TextView) view.findViewById(R.id.separator);

text.setText(name);

return view;

}}

然后ListItem上课public class ListItem implements Item {

private final String         str1;

private final String         str2;

public ListItem(String text1, String text2) {

this.str1 = text1;

this.str2 = text2;

}

@Override

public int getViewType() {

return RowType.LIST_ITEM.ordinal();

}

@Override

public View getView(LayoutInflater inflater, View convertView) {

View view;

if (convertView == null) {

view = (View) inflater.inflate(R.layout.my_list_item, null);

// Do some initialization

} else {

view = convertView;

}

TextView text1 = (TextView) view.findViewById(R.id.list_content1);

TextView text2 = (TextView) view.findViewById(R.id.list_content2);

text1.setText(str1);

text2.setText(str2);

return view;

}}

并且很简单Activity地显示它public class MainActivity extends ListActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

List items = new ArrayList();

items.add(new Header("Header 1"));

items.add(new ListItem("Text 1", "Rabble rabble"));

items.add(new ListItem("Text 2", "Rabble rabble"));

items.add(new ListItem("Text 3", "Rabble rabble"));

items.add(new ListItem("Text 4", "Rabble rabble"));

items.add(new Header("Header 2"));

items.add(new ListItem("Text 5", "Rabble rabble"));

items.add(new ListItem("Text 6", "Rabble rabble"));

items.add(new ListItem("Text 7", "Rabble rabble"));

items.add(new ListItem("Text 8", "Rabble rabble"));

TwoTextArrayAdapter adapter = new TwoTextArrayAdapter(this, items);

setListAdapter(adapter);

}}

布局 R.layout.header<?xml  version="1.0" encoding="utf-8"?>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal" >

style="?android:attr/listSeparatorTextViewStyle"

android:id="@+id/separator"

android:text="Header"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:background="#757678"

android:textColor="#f5c227" />

布局 R.layout.my_list_item<?xml  version="1.0" encoding="utf-8"?>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal" >

android:id="@+id/list_content1"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:layout_margin="5dip"

android:clickable="false"

android:gravity="center"

android:longClickable="false"

android:paddingBottom="1dip"

android:paddingTop="1dip"

android:text="sample"

android:textColor="#ff7f1d"

android:textSize="17dip"

android:textStyle="bold" />

android:id="@+id/list_content2"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:layout_margin="5dip"

android:clickable="false"

android:gravity="center"

android:linksClickable="false"

android:longClickable="false"

android:paddingBottom="1dip"

android:paddingTop="1dip"

android:text="sample"

android:textColor="#6d6d6d"

android:textSize="17dip" />

布局 R.layout.activity_main.xml

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity" >

android:id="@android:id/list"

android:layout_width="fill_parent"

android:layout_height="fill_parent" />

你也可以获得更好的使用ViewHolders,异步加载东西,或任何你喜欢的东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值