android 自定义headerview,Android自定义View之PinnerHeaderListView

PinnerHeaderListView提供头部停悬及Item分类功能

github开源地址 https://github.com/JimiSmith/PinnedHeaderListView

2个类

PinnedHeaderListView

SectionedBaseAdapter

使用

Activity布局

实体类

public class Entry {

public String time;//header

public ArrayList items;

public Entry(String time, ArrayList items) {

this.time = time;

this.items = items;

}

public Entry() {

}

//header下的item实体类

public class Item {

public String time;

public String account;

public String type;

public Item(String time, String account, String type) {

this.time = time;

this.account = account;

this.type = type;

}

public Item(){

}

}

}

Activity

public class MainActivity extends Activity {

PinnedHeaderListView listView;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

listView = (PinnedHeaderListView) findViewById(R.id.listView);

initData();

}

//初始化数据

private void initData() {

ArrayList items1=new ArrayList();

ArrayList items2=new ArrayList();

ArrayList items3=new ArrayList();

ArrayList items4=new ArrayList();

Item item1=new Entry().new Item("01:00:00","100.00","现金");

Item item2=new Entry().new Item("02:00:00","600.00","支付宝");

Item item3=new Entry().new Item("03:00:00","7000.00","支票");

Item item4=new Entry().new Item("04:00:00","100.00","现金");

Item item5=new Entry().new Item("05:00:00","400.00","现金");

Item item6=new Entry().new Item("06:00:00","300.00","现金");

Item item7=new Entry().new Item("07:00:00","300.00","银行卡");

Item item8=new Entry().new Item("08:00:00","111.00","现金");

Item item9=new Entry().new Item("09:00:00","2000.00","支票");

Item item10=new Entry().new Item("10:00:00","100.00","现金");

Item item11=new Entry().new Item("11:00:00","200.00","现金");

items1.add(item1);

items1.add(item2);

items1.add(item4);

items1.add(item5);

items2.add(item6);

items2.add(item7);

items2.add(item8);

items3.add(item9);

items3.add(item10);

items4.add(item11);

ArrayList entries=new ArrayList<>();

Entry entry1=new Entry("2017年1月",items1);

Entry entry2=new Entry("2016年2月",items2);

Entry entry3=new Entry("2016年3月",items3);

Entry entry4=new Entry("2016年4月",items4);

entries.add(entry1);

entries.add(entry2);

entries.add(entry3);

entries.add(entry4);

TestSectionedAdapter sectionedAdapter = new TestSectionedAdapter(this,entries);

listView.setAdapter(sectionedAdapter);

}

}

自定义Adapter继承SectionBaseAdapter

public class TestSectionedAdapter extends SectionedBaseAdapter {

private LayoutInflater mInflater;

private Context context;

private ArrayList entries;

public TestSectionedAdapter(Context context, ArrayList entries) {

this.context = context;

this.entries = entries;

mInflater = LayoutInflater.from(context);

}

@Override

public Object getItem(int section, int position) {

return null;

}

@Override

public long getItemId(int section, int position) {

return 0;

}

//header的总数量

@Override

public int getSectionCount() {

return entries.size();

}

//每个header[section]下的item个数,entries.get(section).items,这里用ListView作为Item因此返回1

@Override

public int getCountForSection(int section) {

return 1;

}

@Override

public View getItemView(final int section, int position, View convertView, ViewGroup parent) {

ItemViewHolder viewHolder;

if (convertView == null) {

viewHolder = new ItemViewHolder();

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

viewHolder.listVIew = (ListView) convertView.findViewById(R.id.listView);

convertView.setTag(viewHolder);

} else {

viewHolder = (ItemViewHolder) convertView.getTag();

}

viewHolder.listVIew.setAdapter(new TestAdapter(context, entries.get(section).items, section));

return convertView;

}

@Override

public View getSectionHeaderView(final int section, View convertView, ViewGroup parent) {

HeaderViewHolder viewHolder;

if (convertView == null) {

viewHolder = new HeaderViewHolder();

convertView = mInflater.inflate(R.layout.header_item, parent,false);

viewHolder.textView = (TextView) convertView.findViewById(R.id.textItem);

convertView.setTag(viewHolder);

} else {

viewHolder = (HeaderViewHolder) convertView.getTag();

}

viewHolder.textView.setText(entries.get(section).time);

return convertView;

}

//item

class ItemViewHolder {

ListView listVIew;

}

//header

class HeaderViewHolder {

TextView textView;

}

}

Item中ListView的Adapter

public class TestAdapter extends BaseAdapter {

private LayoutInflater mInflater;

private Context context;

private ArrayList items;

private int index;//是哪个header下的item

public TestAdapter(Context context, ArrayList items,int index) {

this.context = context;

this.items = items;

this.index = index;

mInflater = LayoutInflater.from(context);

}

@Override

public int getCount() {

return items.size();

}

@Override

public Object getItem(int position) {

return items.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(final int position, View convertView, ViewGroup parent) {

ViewHolder viewHolder = null;

// 初始化组件

if (convertView == null) {

viewHolder = new ViewHolder();

convertView = mInflater.inflate(R.layout.list_item_item, parent, false);

viewHolder.time = (TextView) convertView.findViewById(R.id.time);

viewHolder.account = (TextView) convertView.findViewById(R.id.account);

viewHolder.type = (TextView) convertView.findViewById(R.id.type);

viewHolder.img = (ImageView) convertView.findViewById(R.id.img);

convertView.setTag(viewHolder);

} else {

viewHolder = (ViewHolder) convertView.getTag();

}

Item item = items.get(position);

viewHolder.time.setText(item.time);

viewHolder.type.setText(item.type);

viewHolder.account.setText(item.account);

viewHolder.img.setImageResource(R.mipmap.ic_launcher);

convertView.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(context, "这是第"+(index+1)+"个entry下的第"+(position+1)+"个item", Toast

.LENGTH_SHORT).show();

}

});

return convertView;

}

class ViewHolder {

TextView time;

TextView account;

TextView type;

ImageView img;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值