android-ListView分组显示_第1页
android-ListView分组显示_第2页
android-ListView分组显示_第3页
android-ListView分组显示_第4页
android-ListView分组显示_第5页
已阅读5页,还剩31页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android ListView 分组显示 整理 分组显示 整理 对于 Listview 的分组我们再熟悉不过了 因为 Android 自带的通讯录中的联系人信息就是 使用的 ListView 分组 最近项目中用到了这个功能 所以趁着周末有时间 也更新下一篇 这样的博客 希望对大家能够有帮助 其实对于分组的 ListView 和我们平时用的 ListView 没有多大差别 就是需要在适 配器中的 getView 方法中做下判断 只要理解了这个 下面就好说了 下面我们看下实现 代码 首先是 main xml 布局 html 因为 listview 要加载两种不同的 item 所以要实现两个 item 布局 addexam list item xml html 分组标签对应的布局 addexam list item tag xml html 布局文件我们已经实现了 下面看下在程序中我们是怎么处理的吧 html public class TestActivity extends Activity Called when the activity is first created private List list null private List groupkey new ArrayList private List aList new ArrayList private List bList new ArrayList private ListView listview Override public void onCreate Bundle savedInstanceState super onCreate savedInstanceState setContentView R layout main listview ListView findViewById R id listView list initData MyAdapter adapter new MyAdapter listview setAdapter adapter public void initData list new ArrayList groupkey add A 组 groupkey add B 组 for int i 0 i 5 i aList add A 组 i list add A 组 list addAll aList for int i 0 i 8 i bList add B 组 i list add B 组 list addAll bList private class MyAdapter extends BaseAdapter Override public int getCount TODO Auto generated method stub return list size Override public Object getItem int position TODO Auto generated method stub return list get position Override public long getItemId int position TODO Auto generated method stub return position Override public boolean isEnabled int position TODO Auto generated method stub if groupkey contains getItem position return false return super isEnabled position Override public View getView int position View convertView ViewGroup parent TODO Auto generated method stub View view convertView if groupkey contains getItem position view LayoutInflater from getApplicationContext inflate R layout addexam list item tag null else view LayoutInflater from getApplicationContext inflate R layout addexam list item null TextView text TextView view findViewById R id addexam list item text text setText CharSequence getItem position return view public class TestActivity extends Activity Called when the activity is first created private List list null private List groupkey new ArrayList private List aList new ArrayList private List bList new ArrayList private ListView listview Override public void onCreate Bundle savedInstanceState super onCreate savedInstanceState setContentView R layout main listview ListView findViewById R id listView list initData MyAdapter adapter new MyAdapter listview setAdapter adapter public void initData list new ArrayList groupkey add A 组 groupkey add B 组 for int i 0 i 5 i aList add A 组 i list add A 组 list addAll aList for int i 0 i 8 i bList add B 组 i list add B 组 list addAll bList private class MyAdapter extends BaseAdapter Override public int getCount TODO Auto generated method stub return list size Override public Object getItem int position TODO Auto generated method stub return list get position Override public long getItemId int position TODO Auto generated method stub return position Override public boolean isEnabled int position TODO Auto generated method stub if groupkey contains getItem position return false return super isEnabled position Override public View getView int position View convertView ViewGroup parent TODO Auto generated method stub View view convertView if groupkey contains getItem position view LayoutInflater from getApplicationContext inflate R layout addexam list item tag null else view LayoutInflater from getApplicationContext inflate R layout addexam list item null TextView text TextView view findViewById R id addexam list item text text setText CharSequence getItem position return view 代码好像挺简单 更我们平时使用 lsitview 也没多大区别 下面看看能不能实现呢 运行一下 摘自 wangkuifeng0118 的专栏 程序主界面 SeparateListView java java view plaincopyprint 1 package whu iss wuxianglong 2 3 import java util ArrayList 4 import java util List 5 6 import android app Activity 7 import android content Context 8 import android os Bundle 9 import android view LayoutInflater 10 import android view View 11 import android view ViewGroup 12 import android widget ArrayAdapter 13 import android widget ListView 14 import android widget TextView 15 16 public class SeparateListView extends Activity 17 ListView listView 18 MyAdapter myAdapter 19 public List listTag new ArrayList 20 21 Called when the activity is first created 22 Override 23 public void onCreate Bundle savedInstanceState 24 super onCreate savedInstanceState 25 setContentView R layout main 26 27 listView ListView findViewById R id list 28 myAdapter new MyAdapter this 29 android R layout simple expandable list item 1 getData 30 listView setAdapter myAdapter 31 32 private List getData 33 List data new ArrayList 34 int i 0 35 36 data add A 37 listTag add A 38 data add aa 试数据 i 39 data add a 试数据 i 40 data add aa 试数据 i 41 listTag add B 42 data add B 43 data add bb 试数据 i 44 data add b 试数据 i 45 data add b 试数据 i 46 data add b 试数据 i 47 listTag add C 48 data add C 49 data add c 测试数据 i 50 data add c 测试数据 i 51 listTag add D 52 data add D 53 data add d 测试数据 i 54 data add d 测试数据 i 55 data add d 测试数据 i 56 listTag add E 57 data add E 58 data add e 测试数据 i 59 data add e 测试数据 i 60 data add e 测试数据 i 61 listTag add F 62 data add F 63 data add f 测试数据 i 64 return data 65 66 67 68 class MyAdapter extends ArrayAdapter 69 70 public MyAdapter Context context int textViewResourceId 71 List objects 72 super context textViewResourceId objects 73 74 75 76 Override 77 public boolean areAllItemsEnabled 78 return false 79 80 81 Override 82 public boolean isEnabled int position 83 如果 开头 则该项不可选 84 return listTag contains getItem position 85 86 87 Override 88 public View getView int position View convertView ViewGroup parent 89 View view convertView 90 根据标签类型加载不通的布局模板 91 if listTag contains getItem position 92 如果是标签项 93 view LayoutInflater from getContext inflate R layout group lis t item tag null 94 else 95 否则就是数据项 96 view LayoutInflater from getContext inflate R layout group lis t item null 97 98 显示名称 99 TextView textView TextView view findViewById R id group list ite m text 100 textView setText getItem position 101 返回重写的 view 102 return view 103 104 105 106 2 程序主界面布局文件 main xml html view plaincopyprint 1 2 7 11 12 3 ListView 中数据部分样式布局文件 group list item xml html view plaincopyprint 1 2 7 11 12 18 19 4 ListView 中分组标志行的样式布局文件 group list item tag xml html view plaincopyprint 1 2 7 13 14 Listview 显示数据查询后数据 TestListviewActivity java 02 03 package com androidtest 04 05 import android app ListActivity 06 import android content Intent 07 import android os Bundle 08 import android view View 09 import android widget AdapterView 10 import android widget AdapterView OnItemClickListener 11 import android widget ArrayAdapter 12 import android widget ListView 13 14 public class TestListviewActivity extends ListActivity implements OnItemClickListener 15 Called when the activity is first created 16 Override 17 public void onCreate Bundle savedInstanceState 18 super onCreate savedInstanceState 19 ListView mListView getListView 2 0 mListView setAdapter new ArrayAdapter this android R layout simple list item 1 new String Item0 Item1 Item2 Item3 Item4 Item5 Item6 Ite m7 Item8 Item9 21 mListView setOnItemClickListener this 22 23 24 Override 25 public void onItemClick AdapterView parent View view int position long id 26 Intent intent new Intent this TargetActivity class 27 intent putExtra lv item id id 28 startActivity intent 29 30 view source print 01 TargetActivity java 02 package com androidtest 03 04 import android app Activity 05 import android os Bundle 06 07 public class TargetActivity extends Activity 08 Override 09 protected void onCreate Bundle savedInstanceState 10 TODO Auto generated method stub 11 super onCreate savedInstanceState 12 setContentView R layout main 13 long lv item id getIntent getLongExtra lv item id 1 14 if lv item id 1 15 根据 ID 查询做数据库操作吧 16 17 18 manifest 文件 view source print 01 02 06 07 08 09 12 15 16 17 18 19 20 21 22 23 Android 之使用 SQLite 数据库 增 删 改 查 分页等 以及 ListView 显示 数据 摘自个人博客 由于刚接触 android 开发 故此想把学到的基础知识记录一下 以备查询 故 此写的比较啰嗦 步骤如下 一 介绍 此文主要是介绍怎么使用 android 自带的数据库 SQLite 以及把后台的 数据用 ListView 控件显示 二 新建一个 android 工程 DBSQLiteOperate 工程目录 三 清单列表 AndroidManifest xml 的配置为 四 main xml 配置清单 五 item xml 配置清单 六 string xml 配置清单 Hello World DBSQLiteOperateActivity ExampleDBSQLiteOperate8 姓名 电话 存款 七 DBSQLiteOperateActivity java Activity 类的源码 package com example dboperate import java util ArrayList import java util HashMap import java util List import java util Map import com example adapter PersonAdapter import com example domain Person import com example service PersonService import android app Activity import android database Cursor import android os Bundle import android view View import android view View OnClickListener import android widget AdapterView import android widget AdapterView OnItemClickListener import android widget ListView import android widget SimpleAdapter import android widget SimpleCursorAdapter import android widget Toast public class DBSQLiteOperateActivity extends Activity ListView listView PersonService personService OnItemClickListener listViewListener Called when the activity is first created Override public void onCreate Bundle savedInstanceState super onCreate savedInstanceState setContentView R layout main listViewListener new OnItemClickListener Override public void onItemClick AdapterView parent View view int position long id 得到 listView 控件 ListView listView ListView parent 1 如果使用自定义适配器 返回的是 Person 对象 得到该条目数据 Person person Person listView getItemAtPosition position 广播出去 Toast makeText getApplicationContext person toString Toast LENGTH LONG show 2 如果使用 showList2 方法中的适配器时 则取得的值是不一样的 返 回的是 cursor Cursor cursor Cursor listView getItemAtPosition position int personid cursor getInt cursor getColumnIndex id Toast makeText getApplicationContext personid Toast LENGTH LONG show 3 如果使用 showList 方法中的适配器时 则取得的值是不一样的 返 回的是 map SuppressWarnings unchecked Map map Map listView getItemAtPosition position String name map get name toString String personid map get personid toString Toast makeText getApplicationContext personid name Toast LENGTH LONG show listView ListView this findViewById R id listView listView setOnItemClickListener listViewListener personService new PersonService this showList private void showList List persons personService getScrollData 0 50 List HashMap data new ArrayList HashMap for Person person persons HashMap item new HashMap item put name person getName item put phone person getPhone item put amount person getAmount item put personid person getId data add item SimpleAdapter adapter new SimpleAdapter this data R layout item new String name phone amount new int R id name R id phone R id amount listView setAdapter adapter public void showList2 Cursor cursor personService getCursorScrollData 0 50 该适配器要求返回的结果集 cursor 必须包含 id 字段 所以需要对取得结 果集进行处理 SimpleCursorAdapter adapter new SimpleCursorAdapter this R layout item cursor new String name phone amount new int R id name R id phone R id amount listView setAdapter adapter 自定义适配器 public void showList3 List persons personService getScrollData 0 50 第一个参数 上下文 context 第二个参数 要显示的数据 第三个参数 绑定的条目界面 PersonAdapter adapter new PersonAdapter this persons R layout item listView setAdapter adapter 八 person java 实体类 源码 package com example domain public class Person private Integer id private String name private String phone private Integer amount public Integer getId return id public void setId Integer id this id id public String getName return name public void setName String name this name name public String getPhone return phone public void setPhone String phone this phone phone public Person String name String phone this name name this phone phone public Person Integer id String name String phone Integer amount super this id id this name name this phone phone this amount amount public Person super public Integer getAmount return amount public void setAmount Integer amount this amount amount Override public String toString return Person id id name name phone phone amount amount 九 DBOperateHelper java 业务类源码 package com example service import android content Context import android database sqlite SQLiteDatabase import android database sqlite SQLiteDatabase CursorFactory import android database sqlite SQLiteOpenHelper public class DBOperateHelper extends SQLiteOpenHelper public DBOperateHelper Context context 默认创建的数据库文件保存 在 database 第一个参数是上下文 第二个参数是数据库名称 第三个是游标工厂为 null 时使用 数据库默认的游标工厂 第四个是数据库版本号但是不能为 0 一 般大于 0 super context smallpig null 4 数据库每一次被创建时被调用 Override public void onCreate SQLiteDatabase sqldb sqldb execSQL create table person personid integer primary key autoincrement name varchar 20 phone varchar 12 null 每一次数据库版本号发生变动时触发此方法 比如如果想往数据库中再插入一些表 字段或者其他信息时通过修改数 据库版本号来触发此方法 Override public void onUpgrade SQLiteDatabase db int oldVersion int newVersion db execSQL alter table person add phone varchar 12 null db execSQL alter table person add amount Integer null 十 PersonService java 业务类源码 package com example service import java util ArrayList import java util List import android content Context import android database Cursor import android database sqlite SQLiteDatabase import com example domain Person public class PersonService private DBOperateHelper dbOperateHelper public PersonService Context context this dbOperateHelper new DBOperateHelper context 保存记录 param person public void save Person person 得到数据库实例 里面封装了数据库操作方法 SQLiteDatabase sqldb dbOperateHelper getWritableDatabase sqldb execSQL insert into person name phone values person getName person getPhone 利用占位符可以避免注入 但是注意数组参与与占位符对应的字段要一一 对应 sqldb execSQL insert into person name phone amount values new Object person getName person getPhone person getAmount 关闭数据库 sqldb close 删除记录 param id public void delete Integer id SQLiteDatabase sqldb dbOperateHelper getWritableDatabase sqldb execSQL delete from person where personid new Object id sqldb close 更新记录 param person public void update Person person SQLiteDatabase sqldb dbOperateHelper getWritableDatabase sqldb execSQL update person set name phone amount where personid new Object person getName person getPhone person getAmount person getId sqldb close 通过 ID 查询记录 param id return public Person find Integer id getWritableDatabase 与 getReadableDatabase 的区别 getReadableDatabase 会先返回 getWritableDatabase 可写 如果调用 getWritableDatabase 失败 则才会调用 getReadableDatabase 后续方法 使数据库只读 当写入的数据超过数据库大小则调用 getWritableDatabase 会失败 所以只读时则可以使用此方法 其它情况 只要不是超过数据库大小 也可 以使用此方法 SQLiteDatabase sqldb dbOperateHelper getReadableDatabase Cursor cursor sqldb rawQuery select from person where personid new String String valueOf id int personid String name String phone int amount Person person null if cursor moveToFirst personid cursor getInt cursor getColumnIndex personid name cursor getString cursor getColumnIndex name phone cursor getString cursor getColumnIndex phone amount cursor getInt cursor getColumnIndex amount person new Person personid name phone amount cursor close return person 返回指定长度记录 limit 3 5 适用于分页 param offset 起始 param maxResult 长度 return public List getScrollData int offset int maxResult SQLiteDatabase sqldb dbOperateHelper getReadableDatabase Cursor cursor sqldb rawQuery select from person order by personid asc limit new String String valueOf offset String valueOf maxResult int personid String name String phone int amount Person person null List persons new ArrayList while cursor moveToNext personid cursor getInt cursor getColumnIndex personid name cursor getString cursor getColumnIndex name phone cursor getString cursor getColumnIndex phone amount cursor getInt cursor getColumnIndex amount person new Person personid name phone amount persons add person cursor close return persons 返回 cursor param offset 起始 param maxResult 长度 return public Cursor getCursorScrollData int offset int maxResult SQLiteDatabase sqldb dbOperateHelper getReadableDatabase Cursor cursor sqldb rawQuery select personid as id name phone amount from person order by personid asc limit new String String valueOf offset String valueOf maxResult return cursor 返回总记录数 return public long getCount SQLiteDatabase sqldb dbOperateHelper getReadableDatabase Cursor cursor sqldb rawQuery select count from person null 该查询语句值返回一条语句 cursor moveToFirst long result cursor getLong 0 cursor close return result public void payment SQLiteDatabase sqldb dbOperateHelper getWritableDatabase sqldb beginTransaction 开启事务 try sqldb execSQL update person set amount amount 10 where personid 1 sqldb execSQL update person set amount amount 10 where personid 2 sqldb setTransactionSuccessful 设置事务标志位 true finally 结束事务 有两种情况 commit rollback 事务提交或者回滚是由事务 的标识决定的 事务为 ture 则提交 事务为 flase 则回滚 默认为 false sqldb endTransaction 十一 OtherPersonService java 业务类源码 package com example service import java util ArrayList import java util List import com example domain Person import android content ContentValues import android content Context import android database Cursor import android database sqlite SQLiteDatabase import android database sqlite SQLiteDatabase CursorFactory import android database sqlite SQLiteOpenHelper public class OtherPersonService private DBOperateHelper dbOperateHelper public OtherPersonService Context context this dbOperateHelper new DBOperateHelper context 保存记录 param person public void save Person person 得到数据库实例 里面封装了数据库操作方法 SQLiteDatabase sqldb dbOperateHelper getWritableDatabase sqldb execSQL insert into person name phone values person getName person getPhone 利用占位符可以避免注入 但是注意数组参与与占位符对应的字段要一一 对应 sqldb execSQL insert into person name phone values new Object person getName person getPhone ContentValues values new ContentValues values put name person getName values put phone person getPhone values put amount person getAmount 第一个参数是表名 第三个为字段值集合 第二个参数是空值字段 当第 三个字段值集合为空时 系统会自动插入一条第二个参数为空的 sql 语句 否则当第三个参数为空时 如果第二个参数也为空 那么插入表就会找不 到插入的字段信息 会报错 sqldb insert person name values 关闭数据库 sqldb close 删除记录 param id public void delete Integer id SQLiteDatabase sqldb dbOperateHelper getWritableDatabase sqldb execSQL delete

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论