带有标题头的listview
2016-06-22 14:13
225 查看
1.首先是两个数据模型类
3.布局文件
4.引用
代码地址http://download.csdn.net/detail/qq_27280457/9556434
package com.example.titlelistviewdemo; public class Data { private String text1, text2, text3; //数据1 2 3 public Data(String text1, String text2, String text3) { this.text1 = text1; this.text2 = text2; this.text3 = text3; } public String getText1() { return text1; } public String getText2() { return text2; } public String getText3() { return text3; } }
package com.example.titlelistviewdemo; import java.util.ArrayList; import java.util.List; public class Type { private String title; //ListView头部显示的标题 private List<Data> mList; //头部对应的内容集合 public Type(String title) { this.title = title; mList = new ArrayList<Data>(); } /** * 添加项目 * @param data Data对象 */ public void addItem(Data data) { mList.add(data); } /** * 获取项目 * @param position 如果position为1就返回标题 * @return */ public Object getItem(int position) { if (position == 0) { return title; } else { return mList.get(position - 1); } } /** * @return item数目,为集合大小+1 */ public int size() { return mList.size() + 1; } }2.自己写的adapter
package com.example.titlelistviewdemo; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class MyAdapter extends BaseAdapter { private static final int TYPE_HEADER = 0; //代表标题 private static final int TYPE_ITEM = 1; //代表项目item private List<Type> mList; private LayoutInflater inflater; public MyAdapter(Context context, List<Type> list) { mList = list; inflater = LayoutInflater.from(context); } /** * * @return 所有项的总和 */ @Override public int getCount() { int count = 0; if (mList != null) { for (Type type : mList) { count += type.size(); } } return count; } /** * 根据position的不同返回不同的值 * @param position * @return */ @Override public Object getItem(int position) { int head = 0; //标题位置 for (Type type : mList) { int size = type.size(); int current = position - head; if (current < size) { //返回对应位置的值 return type.getItem(current); } head += size; } return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; switch (getItemViewType(position)) { //分为两种情况加载item case TYPE_HEADER: //加载标题布局 if (convertView == null) { viewHolder = new ViewHolder(); convertView = inflater.inflate(R.layout.header, parent, false); viewHolder.title = (TextView) convertView.findViewById(R.id.date); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.title.setText((CharSequence) getItem(position)); break; case TYPE_ITEM: //加载数据项目布局 if (convertView == null) { viewHolder = new ViewHolder(); convertView = inflater.inflate(R.layout.adapter, parent, false); viewHolder.tv1 = (TextView) convertView.findViewById(R.id.text1); viewHolder.tv2 = (TextView) convertView.findViewById(R.id.text2); viewHolder.tv3 = (TextView) convertView.findViewById(R.id.text3); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } Data data = (Data) getItem(position); viewHolder.tv1.setText(data.getText1()); viewHolder.tv2.setText(data.getText2()); viewHolder.tv3.setText(data.getText3()); break; } return convertView; } /** * * @return 返回item类型数目 */ @Override public int getViewTypeCount() { return 2; } /** * 获取当前item的类型 * @param position * @return */ @Override public int getItemViewType(int position) { int head = 0; for (Type type : mList) { int size = type.size(); int current = position - head; if (current == 0) { return TYPE_HEADER; } head += size; } return TYPE_ITEM; } /** * 判断当前的item是否可以点击 * @param position * @return */ @Override public boolean isEnabled(int position) { return getItemViewType(position) != TYPE_HEADER; } @Override public boolean areAllItemsEnabled() { return false; } private class ViewHolder { TextView tv1, tv2, tv3, title; } }
3.布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:layout_width="70dp" android:layout_height="70dp" android:src="@android:drawable/ic_delete" android:scaleType="centerCrop" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:id="@+id/text1" android:text="text" android:textSize="17sp" android:layout_gravity="center_vertical" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:id="@+id/text2" android:text="text" android:textSize="17sp" android:layout_gravity="center_vertical" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:id="@+id/text3" android:text="text" android:textSize="17sp" android:layout_gravity="center_vertical" /> </LinearLayout> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="25sp" android:id="@+id/date" android:background="@android:color/darker_gray" /> </LinearLayout>
4.引用
package com.example.titlelistviewdemo; import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.ListView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = (ListView) findViewById(R.id.list); List<Type> list = new ArrayList<Type>(); for (int i = 1; i <= 5; i++) { Type type = new Type("标题" + i); for (int j = 0; j < Math.random() * 6; j++) { Data data = new Data("数据1", "数据2", "数据3"); type.addItem(data); } list.add(type); } MyAdapter adapter = new MyAdapter(this, list); listView.setAdapter(adapter); } }5.效果图
代码地址http://download.csdn.net/detail/qq_27280457/9556434
相关文章推荐
- log4j学习笔记--ConversionPattern参数详解-- RollingFileAppender选项
- 备份恢复以及replication复制问题
- 旋转转盘
- [leetcode] nim game
- Android图片加载库测试
- svn服务配置和日常维护命令
- Entity Framework Code First使用者的福音 --- EF Power Tool使用记之一
- getaddrinfo函数详细解释
- 收藏的优秀网站(备份一下)
- Linux grep命令
- AngularJS 剽悍的Ajax和承诺
- Centos 7.2 安装 Ambari 2.2.2 + HDP 2.4.2 搭建Hadoop集群
- 用django搭建一个简单到不好意思见人的博客
- 沉浸式状态栏
- Mysql导出导入
- java反射机制
- 使用 notepad++ 编辑器在行首、行尾添加字符
- 【Arduino官方教程第一辑】示例程序 6-2 用压电元件检测振动
- 99年的大神寻路文章
- 极米说要颠覆传统电视,它做得怎么样了?