Android自定义View之PinnerHeaderListView
来源:互联网 发布:日系男装淘宝 知乎 编辑:程序博客网 时间:2024/06/06 19:05
PinnerHeaderListView提供头部停悬及Item分类功能
github开源地址 https://github.com/JimiSmith/PinnedHeaderListView
2个类
PinnedHeaderListView
SectionedBaseAdapter
使用
Activity布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.example.pinnedheaderlistview.pinnedheaderlistview.PinnedHeaderListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff"/></LinearLayout>
实体类
public class Entry { public String time;//header public ArrayList<Item> items; public Entry(String time, ArrayList<Item> 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<Item> items1=new ArrayList<Item>(); ArrayList<Item> items2=new ArrayList<Item>(); ArrayList<Item> items3=new ArrayList<Item>(); ArrayList<Item> items4=new ArrayList<Item>(); 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<Entry> 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<Entry> entries; public TestSectionedAdapter(Context context, ArrayList<Entry> 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<Item> items; private int index;//是哪个header下的item public TestAdapter(Context context, ArrayList<Item> 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; }}
1 0
- Android自定义View之PinnerHeaderListView
- Android之自定义View
- android 之自定义View
- Android之自定义View
- Android之自定义View
- Android之自定义View
- Android 之 自定义View
- Android 自定义View 之 自定义View属性
- android自定义view之---组合view
- Android自定义View 之 View的测量
- Android 自定义View之View的绘制
- android自定义View练习之波浪View
- Android自定义view之(刻度尺view)
- android 自定义View之Path
- android之【LinearLayout自定义View】
- android 自定义view之onMeasure
- Android 自定义View之BounceProgressBar
- android开发之自定义View
- 浅谈yahoo前端性能团队总结的35条黄金定律
- Lua入门第一节 序章
- 96. Unique Binary Search Trees
- 实验1:2
- Redis与Memcached的区别
- Android自定义View之PinnerHeaderListView
- pthread_create传递线程参数需要注意的问题
- android studio gradle配置
- matlab实现数据的基本读写与字符比较
- 快速排序
- lintcode77最长公共子序列(动态规划medium)
- Spring学习笔记01-自动装配-SpEL-生命周期-后置处理器(未完)
- 手写依赖注入框架
- vc6.0创建与调用dll