您的位置:首页 > 其它

18_ListView实现分组效果

2015-05-28 19:35 399 查看
简单实现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);
}

@Override
public void onCreate(SQLiteDatabase db) {
// 创建数据库表
db.execSQL("create table user(_id integer primary key autoincrement,name varchar(50),phone varchar(12),sortkey varchar(10))");
}

@Override
public 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;
}

@Override
public 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;
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return data.get(position);
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public 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());
}
// 返回重写的view
return 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;

@Override
protected 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" >

<TextView
android: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" >
<!-- 图片和文字 -->
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/hello_world"
android:src="@drawable/ic_launcher" />

<TextView
android: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-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />

<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.contactdemo" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android: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>

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: