`
liaokang.java
  • 浏览: 155165 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Android ListView详解

阅读更多
在android应用中,数据以列表的形式显示通常是通过ListView来实现,下面是一个ListView入门的小例子

1.首先是主布局文件main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content">
  
  <TextView
  	android:layout_width="60px"
  	android:layout_height="wrap_content"
  	android:id="@+id/idTitle"
  	android:text="编号"
  />
  
   <TextView
  	android:layout_width="150px"
  	android:layout_height="wrap_content"
  	android:layout_alignTop="@id/idTitle"
  	android:layout_toRightOf="@id/idTitle"
  	android:id="@+id/name"
  	android:text="姓名"
  />
  
   <TextView
  	android:layout_width="wrap_content"
  	android:layout_height="wrap_content"
  	android:layout_alignTop="@id/name"
  	android:layout_toRightOf="@id/name"
  	android:text="年龄"
  />
  
</RelativeLayout>
	
<ListView
	android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/listView"
/>

</LinearLayout>



2.然后是列表所要用到的布局文件,在layout目录下新建personitem.xml文件,代码如下
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content">
  
  <TextView
  	android:layout_width="60px"
  	android:layout_height="wrap_content"
  	android:id="@+id/personid"
  />
  
   <TextView
  	android:layout_width="150px"
  	android:layout_height="wrap_content"
  	android:layout_alignTop="@id/personid"
  	android:layout_toRightOf="@id/personid"
  	android:id="@+id/personname"
  />
  
   <TextView
  	android:layout_width="wrap_content"
  	android:layout_height="wrap_content"
  	android:layout_alignTop="@id/personname"
  	android:layout_toRightOf="@id/personname"
  	android:id="@+id/personage"
  />
  
</RelativeLayout>



用到的实体bean为Person,代码如下
package com.lamp.domain;

public class Person {
	private Integer personid = null;
	private String name = null;
	private Integer age = null;
	public Person() {
	}
	public Person(String name,Integer age){
		this.name = name;
		this.age = age;
	}
	public Integer getPersonid() {
		return personid;
	}
	public void setPersonid(Integer personid) {
		this.personid = personid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "name: " + this.name + ", age:" + this.age;
	}
	
}



3.接着是Activity代码
package com.lamp.db;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SimpleCursorAdapter;

import com.lamp.domain.Person;
import com.lamp.service.PersonService;

public class DBActivity extends Activity {
	private ListView listView = null;
	private PersonService personService = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		personService = new PersonService(this);

		listView = (ListView) this.findViewById(R.id.listView);
		List<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>();
		List<Person> personList = personService.getScrollData(0, 10);
		HashMap<String,String> map = null;
		for(Person person : personList){
			map = new HashMap<String,String>();
			map.put("personid", String.valueOf(person.getPersonid()));
			map.put("name", person.getName());
			map.put("age", String.valueOf(person.getAge()));
			data.add(map);
		}
		SimpleAdapter simpleAdapter = new SimpleAdapter(this, data,
				R.layout.personitem,
				new String[] { "personid", "name", "age" }, new int[]{R.id.personid,R.id.personname,R.id.personage});
		listView.setAdapter(simpleAdapter);
		
		/*
		 * 这是通过游标在ListView控件上显示数据,需要注意的是主键字段名id应改为_id,否则会报错
		Cursor cursor = personService.getRawScrollData(0, 10);
		SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.personitem,
				cursor,
				new String[] { "_id", "name", "age" }, new int[]{R.id.personid,R.id.personname,R.id.personage});
		listView.setAdapter(simpleCursorAdapter);
		*/
		//为item选项设置监听
		listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

			public void onItemClick(AdapterView<?> parent, View view, int position,
					long id) {
				ListView listView = (ListView)parent;
				Map<String,String> map = (HashMap<String, String>)listView.getItemAtPosition(position);
				Log.i("DBActivity", map.get("age"));
			}
			
		});

	}
}


4.业务层代码如下
package com.lamp.service;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.lamp.domain.Person;

public class PersonService {
	private DataBaseOpenHelper dbHelper = null;
	private SQLiteDatabase sqLiteDatabase = null;
	public PersonService(Context context) {
		dbHelper = new DataBaseOpenHelper(context);
		sqLiteDatabase = dbHelper.getWritableDatabase();
	}
	
	public void save(Person person){
		String sql = "insert into person(name,age) values (?,?)";
		sqLiteDatabase.execSQL(sql, new Object[]{person.getName(),person.getAge()});
	}
	
	//指定删除
	public void delete(Integer personid){
		String sql = "delete from person where personid=?";
		sqLiteDatabase.execSQL(sql,new Object[]{personid});
	}
	
	//批量删除
	public void deletePersons(Integer... ids){
		StringBuilder sb = new StringBuilder();
		if(ids.length > 0){
			for (int i = 0; i < ids.length; i++) {
				sb.append('?').append(',');
			}
			sb.deleteCharAt(sb.length()-1);
			String sql = "delete from person where personid in ("+ sb +")";
			sqLiteDatabase.execSQL(sql,(Object[])ids);
		}
	}
	
	//更新数据
	public void update(Person person){
		String sql = "update person set name=?,age=? where personid=?";
		sqLiteDatabase.execSQL(sql, new Object[]{person.getName(),person.getAge(),person.getPersonid()});
	}
	
	//得到全部的结果集
	public List<Person> getAllPersons(){
		String sql = "select name,age from person";
		Cursor cursor = sqLiteDatabase.rawQuery(sql, null);
		Person person = null;
		List<Person> personList = new ArrayList<Person>();
		while(cursor.moveToNext()){
			String name = cursor.getString(0);
			int age = cursor.getInt(1);
			person = new Person(name,age);
			personList.add(person);
		}
		return personList;
	}
	
	//分页取数据
	public List<Person> getScrollData(Integer start, Integer size){
		String sql = "select personid, name,age from person limit ?,?";
		Cursor cursor = sqLiteDatabase.rawQuery(sql, new String[]{String.valueOf(start),String.valueOf(size)});
		List<Person> personList = new ArrayList<Person>();
		Person person = null;
		while(cursor.moveToNext()){
			int personid = cursor.getInt(0);
			String name = cursor.getString(1);
			int age = cursor.getInt(2);
			person = new Person(name,age);
			person.setPersonid(personid);
			personList.add(person);
		}
		return personList;
	}
	
	//返回游标对象,当要在ListView中显示数据时,主键的字段名需设定为_id,否则返回的Cursor对象会出错
	public Cursor getRawScrollData(Integer start, Integer size){
		String sql = "select personid as _id, name,age from person limit ?,?";
		return sqLiteDatabase.rawQuery(sql, new String[]{String.valueOf(start),String.valueOf(size)});
	}
	
	//返回表中总记录条数
	public int getCount(){
		String sql = "select count(*) from person";
		Cursor cursor = sqLiteDatabase.rawQuery(sql, null);
		if(cursor.moveToNext()){
			return cursor.getInt(0);
		}
		return 0;
	}

}



5.由于用到了android的SQLite数据库,对数据库操作的工具类代码如下
package com.lamp.service;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DataBaseOpenHelper extends SQLiteOpenHelper {
	private static final String DBNAME = "android";
	private static final int VERSION = 1;

	public DataBaseOpenHelper(Context context) {
		super(context, DBNAME, null, VERSION);
	}

	@Override
	public void onCreate(SQLiteDatabase sqLiteDatabase) {
		String sql = "create table person (personid integer primary key autoincrement,name varchar(20),age integer)";
		sqLiteDatabase.execSQL(sql);
	}

	@Override
	public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
		String sql = "drop table if exists person";
		sqLiteDatabase.execSQL(sql);
		onCreate(sqLiteDatabase);
	}

}



首先通过单元测试往数据库中添加若干条记录,然后运行项目看到记录以列表的形式显示
分享到:
评论

相关推荐

    android listview 详解 开发指南

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据的列表形式,通常用于创建如联系人列表、消息列表等界面。本篇文章将详细解析ListView的使用,并提供一个简单的ListView实现示例。 首先,我们...

    android ListView详解 源码实例

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据集合,并且支持滚动操作。ListView的使用不仅可以节省屏幕空间,还能提供良好的用户体验。在这个源码实例中,我们将深入探讨ListView的实现,...

    androidListView详解.pdf

    在Android开发中,ListView是一个非常重要的组件,它用于以列表形式展示内容,可自适应数据长度,提供良好的滚动性能和用户交互体验。ListView的核心在于它如何有效地显示和管理大量数据,通过结合适配器(Adapter)...

    android-listview事件详解

    android listview事件详解。

    Android ListView

    Android ListView 详解,适配器adapter详解 博客地址:http://blog.csdn.net/csdnyuandaimaxuexi/article/details/48808303

    android ListView初级到高级详解

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,用户可以通过滚动来查看更多的条目。本文将从初级到高级详细讲解ListView的使用,包括基础设置、复杂列表的构建、自定义适配器以及如何...

    ListView详解

    ### ListView详解 #### 一、概述 在Android开发过程中,`ListView`是一个极其重要的UI组件,主要用于以列表的形式展示大量数据。与普通的`View`不同,`ListView`能够根据数据的大小自动调整显示内容的长度,非常...

    Android核心组件 ListView 详解

    在Android所有常用的原生控件当中,用法最复杂的应该就是ListView了,它专门用于处理那种内容元素很多,手机屏幕无法展示出所有内容的情况。 ?? ListView可以使用列表的形式来展示内容,超出屏幕部分的内容只需要...

    Android中Listview详解

    在Android开发中,ListView是一个非常重要的组件,常用于展示大量数据的列表形式。它可以根据数据的长度自动调整显示,提供良好的用户体验。以下是对ListView组件及其使用的详细解释。 首先,ListView的构成包含三...

    Android软件开发之ListView 详解源码

    在Android应用开发中,ListView是显示大量数据列表的常用组件,它允许用户滚动查看条目,具有很高的可定制性。本篇文章将深入解析ListView的源码,帮助开发者更好地理解和运用这个核心组件。 首先,ListView继承自...

    android_ListView详解

    在Android开发中,ListView是一个非常重要的组件,常用于展示大量数据并支持滚动。它以列表形式展示内容,可以根据数据的长度动态调整显示。ListView的工作原理是通过适配器(Adapter)将数据源与ListView的视图...

    android 列表视图组件 listview详解.doc

    android 列表视图组件 listview详解

Global site tag (gtag.js) - Google Analytics