简单实现ListView分组的效果

1.实现效果如下:

2.数据库准备数据

package com.example.contactdemo.db;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;public class ContactSQLiteOpenHelper extends SQLiteOpenHelper {private static String name = "contact.db";private static Integer version = 1;public ContactSQLiteOpenHelper(Context context) {super(context, name, null, version);}@Overridepublic void onCreate(SQLiteDatabase db) {// 创建数据库表db.execSQL("create table user(_id integer primary key autoincrement,name varchar(50),phone varchar(12),sortkey varchar(10))");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

3.创建实体Bean

package com.example.contactdemo.domain;public class User {private Integer id;private String name;private String phone;private String sortKey;public User() {super();// TODO Auto-generated constructor stub}public User(Integer id, String name, String phone, String sortKey) {super();this.id = id;this.name = name;this.phone = phone;this.sortKey = sortKey;}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 String getSortKey() {return sortKey;}public void setSortKey(String sortKey) {this.sortKey = sortKey;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", phone=" + phone+ ", sortKey=" + sortKey + "]";}}

4.创建Dao实现数据插入及查询

package com.example.contactdemo.dao;import java.util.List;import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;import com.example.contactdemo.db.ContactSQLiteOpenHelper;
import com.example.contactdemo.domain.User;public class UserDao {private ContactSQLiteOpenHelper helper;private List<User> data;private SQLiteDatabase db;public UserDao(Context context,List<User> data) {this.data=data;helper = new ContactSQLiteOpenHelper(context);}public void insert(User u){//获取SQLiteDatabase对象db = helper.getWritableDatabase();db.execSQL("insert into user(name,phone,sortkey) values(?,?,?)", new Object[]{u.getName(),u.getPhone(),u.getSortKey()});db.close();}/*** 针对listView分组的情况*/public void getObjectHeader(){db = helper.getWritableDatabase();//查询出分组的数据  Cursor c = db.rawQuery("select distinct(sortkey) from user order by sortkey", null);//遍历分组while (c.moveToNext()) {//具体的某个组String sortKey = c.getString(c.getColumnIndex("sortkey"));User usort = new User();usort.setSortKey(sortKey);    data.add(usort);//查询这个组对应数据Cursor c2 = db.rawQuery("select _id,name,phone,sortkey from user where  sortkey=?", new String[]{sortKey});//遍历数据while(c2.moveToNext()){User user = new User();user.setId(c2.getInt(c2.getColumnIndex("_id")));user.setName(c2.getString(c2.getColumnIndex("name")));user.setPhone(c2.getString(c2.getColumnIndex("phone")));user.setSortKey(c2.getString(c2.getColumnIndex("sortkey")));data.add(user);}c2.close();}c.close();db.close();}}

5 测试类插入数据及查询数据

package com.example.contactdemo.test;import java.util.ArrayList;
import java.util.List;import android.test.AndroidTestCase;import com.example.contactdemo.dao.UserDao;
import com.example.contactdemo.domain.User;public class UserTest extends AndroidTestCase {private UserDao userDao;private List<User> data = new ArrayList<User>();   public void testInsert() {userDao = new UserDao(getContext(), null);User u1 = new User(null, "陈红军", "15631293227", "c");User u2 = new User(null, "李军", "15631293227", "l");User u3 = new User(null, "红军", "15631293227", "h");User u4 = new User(null, "军军", "15631293227", "j");User u5 = new User(null, "红军", "15631293227", "h");User u6 = new User(null, "陈红军", "15631293227", "c");User u7 = new User(null, "汪红军", "15631293227", "w");User u8 = new User(null, "八戒", "15631293227", "b");User u9 = new User(null, "哈哈四", "15631293227", "h");User u10 = new User(null, "陈红军", "15631293227", "c");userDao.insert(u1);userDao.insert(u2);userDao.insert(u3);userDao.insert(u4);userDao.insert(u5);userDao.insert(u6);userDao.insert(u7);userDao.insert(u8);userDao.insert(u9);userDao.insert(u10);}public void testGetObjectHeader() {userDao = new UserDao(getContext(), data);userDao.getObjectHeader();for(User u:data){if(u.getId()==null){System.out.println("分组的key@@@@@"+u.getSortKey());}else{System.out.println("分组key对应的数据@"+u);}}}
}

6.adapter的实现

package com.example.contactdemo.adapter;import java.util.List;import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;import com.example.contactdemo.R;
import com.example.contactdemo.domain.User;public class UserAdapter extends BaseAdapter {private List<User> data;private Context context;public UserAdapter(Context context, List<User> data) {this.context = context;this.data = data;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn data.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn data.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view = convertView;User u = data.get(position);// 根据标签类型加载不通的布局模板if (u.getId() == null) {// 如果是标签项view = View.inflate(context, R.layout.group_list_item_header, null);} else {// 否则就是数据项了view = View.inflate(context, R.layout.group_list_item, null);}// 显示名称TextView textView = (TextView) view.findViewById(R.id.group_list_item_text);if (u.getId() == null) {textView.setText(u.getSortKey());} else {textView.setText(u.getName());}// 返回重写的viewreturn view;}public boolean isEnabled(int position) {User u = data.get(position);if (u.getId() == null) {return false;}return super.isEnabled(position);}}

7.Activity的实现

package com.example.contactdemo;import java.util.ArrayList;
import java.util.List;import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;import com.example.contactdemo.adapter.UserAdapter;
import com.example.contactdemo.dao.UserDao;
import com.example.contactdemo.domain.User;public class MainActivity extends Activity {//声明listView控件对象private ListView lv_users;//数据库操作对象private UserDao userDao;//显示的数据private List<User> data = new ArrayList<User>();//适配器对象private UserAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取listView控件对象lv_users = (ListView) findViewById(R.id.lv_users);//创建数据库操作对象userDao = new UserDao(this, data);//查询数据userDao.getObjectHeader();//创建适配器对象adapter = new UserAdapter(this, data);//设置控件的适配器lv_users.setAdapter(adapter);}
}

7.需要的布局文件

7.1 activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="${relativePackage}.${activityClass}" ><ListView android:id="@+id/lv_users"android:layout_width="match_parent"android:layout_height="match_parent"/></RelativeLayout>

7.2 group_list_item_header.xml

<?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="wrap_content"android:id="@+id/group_header"android:background="#555555"android:paddingLeft="10dip" ><TextViewandroid:id="@+id/group_list_item_text"android:layout_width="wrap_content"android:layout_height="20dip"android:gravity="center_vertical"android:textColor="#ffffff" /></LinearLayout>

7.3 group_list_item.xml

<?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="wrap_content"android:orientation="horizontal"android:id="@+id/group_content"android:padding="8dip" ><!-- 图片和文字 --><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:contentDescription="@string/hello_world"android:src="@drawable/ic_launcher" /><TextViewandroid:id="@+id/group_list_item_text"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center_vertical"android:paddingLeft="5dip"/></LinearLayout>

8.项目清单文件AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.contactdemo"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="19" /><instrumentationandroid:name="android.test.InstrumentationTestRunner"android:targetPackage="com.example.contactdemo" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name=".MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><uses-library android:name="android.test.runner" /></application></manifest>

18_ListView实现分组效果相关推荐

  1. 小手段:开启 GNOME 的窗口分组效果

    Toy Posted in Tips 用过 Windows XP 的伴侣除夜要都晓得它有一项分组雷同义务栏按钮的效果,该效果主动将同类窗口的义务按钮折叠为一个单独的按钮,从而无效处置义务栏的窗口拥堵后 ...

  2. 14_自定义ItemDecoration实现qq好友列表分组效果

    14_自定义ItemDecoration实现qq好友列表分组效果 一.先上效果 二.RecyclerView实现简单分组 RecyclerView比较常规的用法,显示多item布局,直接上代码: pu ...

  3. iOS仿QQ分组效果

    本篇主要讲解仿QQ分组效果的实现,通过本遍的学习,估计都可以自己去实现了(老司机可以),在这里只说仿QQ分组的效果,代码简单,逻辑清晰.其他的功能的可以自行添加,好了,进入主题吧. 效果图 下面的是其 ...

  4. android RecyclerView一步步打造分组效果、类似QQ分组、折叠菜单、分组效果(一)

    第二篇文章链接: android RecyclerView一步步打造分组效果.类似QQ分组.折叠菜单.分组效果(二) 效果图: 前言 之前看到这种效果如果用recyclerview来实现没有一点思路, ...

  5. android 仿qq好友列表分组效果及联系人分组效果

     历史记录仿QQ好友列表的动态效果 以及联系人的分组效果 QQ朋友分组的功能做的不错,大家都很认可,那么到底他的分组并且滑动的时候,标题能停留在顶部是如何实现的呢?今天从网上搜索了一下资料,自己运行了 ...

  6. android RecyclerView一步步打造分组效果、类似QQ分组、折叠菜单、分组效果(二)

    第一篇链接: android RecyclerView一步步打造分组效果.类似QQ分组.折叠菜单.分组效果(一) 注!已更新代码! 上一篇写了分组效果的初步实现: 这一篇就继续增加分组折叠效果和基类的 ...

  7. RecyclerView实现分组效果,多种实现方式

    1.通过自定义 ItemDecoration来实现分组(荐): 利用RecyclerView.ItemDecoration实现顶部悬浮效果 RecyclerView轻松实现悬浮头部分组列表 Recyc ...

  8. android qq分组管理功能,Android实现QQ分组效果

    布局文件: android:layout_width="fill_parent" android:layout_height="fill_parent" and ...

  9. UITableView的折叠收缩和QQ好友分组效果

    可折叠展开的tableView,QQ好友分组列表 demo下载地址https://github.com/zhengwenming/ExpandTableView   原理分析:这个可以折叠的table ...

最新文章

  1. 利用 jquery 获取某个元素下的所有图片并改变其属性
  2. JAVA Bean和XML之间的相互转换 - XStream简单入门
  3. 计算机论文指导书,计算机毕业论文指导书.doc
  4. 多思计组原理虚拟实验室_先睹为快!汽院实验室组团来亮相_搜狐汽车
  5. 普里姆从不同顶点出发_来自三个不同聚类分析的三个不同教训数据科学的顶点...
  6. 惠普计算机笔记本打印机官网,HP2621打印机驱动
  7. iOS 使用 socket 即时通信(非第三方库)
  8. java c# 线程,DART隔离和线程(Java,C#)之间的区别
  9. shell 截取某个字符串之后的内容
  10. java版spring cloud+spring boot+redis社交电子商务平台-docker-feign配置(五)
  11. Pycharm更换主题
  12. creo怎么返回上一步_creo零基础教程,教你creo4.0复制粘贴怎么用
  13. LeetCode 2122. 还原原数组
  14. 雨季车辆天窗漏水解决银弹
  15. s6e3ha3 amoled屏
  16. memset和memset_s
  17. Fiducial marker (Aruco)
  18. SSM框架搭建及项目实战
  19. 【渝粤教育】电大中专跨境电子商务理论与实务 (26)作业 题库
  20. html网页老是崩溃,为什么这个HTML崩溃IE?

热门文章

  1. Excel2016超绚功能mdash;从web端获取数据
  2. Android开发封装高德实时定位工具类
  3. 小学多媒体网络计算机管理制度,小学多媒体教室管理规章制度.doc
  4. JavaScript实现列表功能
  5. 【听】断舍离,人生路上轻装上阵
  6. 教你新手如何才能更好的学平面设计
  7. 最近看到了一个远航财经直播不知道是用什么技术实现的
  8. win7网络适配器_win7系统本地连接不见了如何解决 电脑本地连接不见了解决教程【图文】...
  9. 国家优青,任985院长!
  10. Windows下Docker学习总结