本演示样例说明:

1.自己定义listview条目样式,自己定义listview显示列数的多少,灵活与数据库中字段绑定.

2.实现对DB的增删改查,而且操作后listview自己主动刷新.

3.响应用户操作点击事件,演示样例中展示单击时取出主键Id和其它内容.

4.响应用户操作长按事件,演示样例中展示长按时依据主键Id来编辑和删除数据.

5.表现层与数据处理层分开,不依赖于cursor(使用cursor不易表现和业务分离),支持接口编程.

6.使用数据库处理框架AHibernate灵活操作sqlite数据库,详见: http://blog.csdn.net/lk_blog/article/details/7455992



本演示样例效果图:



列出主要代码:

1.list.xml:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/child"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#E3D25E"
android:orientation="horizontal" > <!-- 若想隐藏id增加此属性: android:visibility="gone",这样做有点相似于Html中hidden域 --> <TextView
android:id="@+id/idTo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ff0000" /> <TextView
android:id="@+id/nameTo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="5px"
android:paddingLeft="50px"
android:paddingTop="5px"
android:text="No data"
android:textColor="#0000ff"
android:textSize="20sp" /> <TextView
android:id="@+id/ageTo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="5px"
android:paddingLeft="50px"
android:paddingTop="5px"
android:text="No data"
android:textColor="#00ff00"
android:textSize="20sp" /> </LinearLayout>

2.MainActivity.java:

package com.tgb.lk.listview;

import java.util.List;
import java.util.Map; import com.tgb.lk.demo.dao.StudentDao;
import com.tgb.lk.demo.dao.impl.StudentDaoImpl;
import com.tgb.lk.demo.model.Student; import com.tgb.lk.listview.R;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
/**
* 欢迎訪问我的博客进行对代码交流: http://blog.csdn.net/lk_blog
* 数据库处理使用AHibernate框架,详见:http://blog.csdn.net/lk_blog/article/details/7455992
* @author likun
*/
public class MainActivity extends Activity {
private static final int ITEM_MODIFY = 1;
private static final int ITEM_DELETE = 2; // 定义接口
private StudentDao dao = null;
private ListView lv = null; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); // 加入
Button btnAdd = (Button) findViewById(R.id.btnAdd);
btnAdd.setOnClickListener(listener);
// 显示前3条数据
Button btnShow = (Button) findViewById(R.id.btnShow);
btnShow.setOnClickListener(listener);
// 删除数据
Button btnClear = (Button) findViewById(R.id.btnClear);
btnClear.setOnClickListener(listener); lv = (ListView) findViewById(R.id.lvStudent);
// 设置在条目上单击监听器
lv.setOnItemClickListener(itemListener);
// 设置长按事件
registerForContextMenu(lv); // 显示全部数据
showData(-1);
} // 显示数据,num小于等于0时显示全部数据,num大于0时显示前N条.
private void showData(int num) {
dao = (dao == null ? new StudentDaoImpl(this) : dao);
List<Map<String, String>> data = null;
if (num <= 0) { // 显示全部学生,调用dao层接口
data = dao.queryAllStudent();
} else {// 显示前N个学生,调用dao层接口
data = dao.queryTopN(num);
}
SimpleAdapter adapter = buildListAdapter(this, data);
lv.setAdapter(adapter); } // 构建adapter.
public SimpleAdapter buildListAdapter(Context context,
List<Map<String, String>> data) {
SimpleAdapter adapter = new SimpleAdapter(context, data, R.layout.list,
new String[] { "_id", "name", "age" }, new int[] { R.id.idTo,
R.id.nameTo, R.id.ageTo });
return adapter;
} // 初始化数据
OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
dao = (dao == null ? new StudentDaoImpl(MainActivity.this) : dao);
switch (v.getId()) {
case R.id.btnAdd:
// 加入学生
Student student1 = new Student();
student1.setName("lk");
student1.setAge(26);
dao.insert(student1); Student student2 = new Student();
student2.setName("cls");
student2.setAge(26);
dao.insert(student2); Student student3 = new Student();
student3.setName("lb");
student3.setAge(27);
dao.insert(student3);
showData(-1); break;
case R.id.btnShow:
// 显示前3条数据
showData(3);
break;
case R.id.btnClear:
// 删除全部数据
dao.deleteData(); // 显示全部数据
showData(-1);
break;
default:
break;
} }
}; // 条目上单击处理方法.
OnItemClickListener itemListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// 这里的view是我们在list.xml中定义的LinearLayout对象.
// 所以能够通过findViewById方法能够找到list.xml中定义的它的子对象,例如以下:
TextView stuId = (TextView) view.findViewById(R.id.idTo);
TextView stuName = (TextView) view.findViewById(R.id.nameTo);
TextView stuAge = (TextView) view.findViewById(R.id.ageTo); toastShow("学号:" + stuId.getText().toString() + "; 姓名:"
+ stuName.getText().toString() + "; 年龄:"
+ stuAge.getText().toString());
}
}; // 封装Toast,一方面调用简单,还有一方面调整显示时间仅仅要改此一个地方就可以.
public void toastShow(String text) {
Toast.makeText(MainActivity.this, text, 1000).show();
} // 长按时显示的菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.setHeaderTitle("请选择操作");
menu.add(0, ITEM_MODIFY, 0, "编辑");
menu.add(0, ITEM_DELETE, 1, "删除");
} // 响应编辑和删除事件处理
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();
// info.targetView得到list.xml中的LinearLayout对象.
String stuId = ((TextView) info.targetView.findViewById(R.id.idTo))
.getText().toString();
if (!TextUtils.isEmpty(stuId)) {
int id = Integer.parseInt(stuId);
dao = (dao == null ? new StudentDaoImpl(this) : dao);
switch (item.getItemId()) {
case ITEM_MODIFY:
// 编辑数据
toastShow("编辑" + stuId);
// 此方法定义在AHibernate中.很多其它使用演示样例见http://blog.csdn.net/lk_blog/article/details/7455992
Student student = dao.get(id);
student.setName("李坤");
student.setAge(26);
dao.update(student); // 此方法定义在AHibernate中.
break;
case ITEM_DELETE:
// 删除数据
toastShow("删除" + stuId);
dao.delete(id);// 此方法定义在AHibernate中.
break;
default:
break;
}
}
showData(-1);
return false;
} }

3.数据库处理层:StudentDaoImpl.java:

package com.tgb.lk.demo.dao.impl;

import java.util.List;
import java.util.Map; import com.tgb.lk.ahibernate.dao.impl.BaseDaoImpl;
import com.tgb.lk.demo.dao.StudentDao;
import com.tgb.lk.demo.model.Student;
import com.tgb.lk.demo.util.DBHelper;
import android.content.Context; //本文数据库处理引用jar包AHibernate处理.
//AHibernate的具体使用教程演示样例地址: http://blog.csdn.net/lk_blog/article/details/7455992
//AHibernate源码交流地址: http://blog.csdn.net/lk_blog/article/details/7456125
//AHibernate jar包下载及源码下载地址: http://download.csdn.net/detail/lk_blog/4222048
public class StudentDaoImpl extends BaseDaoImpl<Student> implements StudentDao {
public StudentDaoImpl(Context context) {
super(new DBHelper(context));
} // 返回一个List,List中的对象是以sql中的列的小写形式为key的Map.(本例中 _id,name,age为key)
public List<Map<String, String>> queryAllStudent() {
String sql = "select _id, name,age from t_student";
return super.query2MapList(sql, null);
} // 返回一个List,List中的对象是以sql中的列的小写形式为key的Map.(本例中 _id,name,age为key)
public List<Map<String, String>> queryTopN(int num) {
String sql = "select _id, name,age from t_student limit ?";
return super.query2MapList(sql, new String[] { String.valueOf(num) });
} public void deleteData() {
String sql = "delete from t_student";
super.execSql(sql, null);
}
}

本演示样例源码下载地址:  http://download.csdn.net/detail/lk_blog/4278055

最后,希望大家指教,对本文不足之处进行批评指正.









android listview综合使用演示样例_结合数据库操作和listitem单击长按等事件处理的更多相关文章

  1. android listview综合使用示例_结合数据库操作和listitem单击长按等事件处理

    本示例说明: 1.自定义listview条目样式,自定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,并且操作后listview自动刷新. 3.响应用户操作点击事 ...

  2. Android之——流量管理程序演示样例

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47680811 眼下.市面上有非常多管理手机流量的软件,能够让用户实时获取到自己手机 ...

  3. [Android]RecyclerView的简单演示样例

    去年google的IO上就展示了一个新的ListView.它就是RecyclerView. 下面是官方的说明,我英语能力有限,只是我大概这么理解:RecyclerView会比ListView更具有拓展 ...

  4. Android - 标准VideoView播放演示样例

    标准VideoView播放演示样例 本文地址: http://blog.csdn.net/caroline_wendy 在Android SDK中的ApiDemos内, 提供标准播放视频的代码,使用V ...

  5. Android之——多线程下载演示样例

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46883927 一.概述 说到Android中的文件下载.Android API中明 ...

  6. Android SQLite 简单使用演示样例

    SQLite简单介绍 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也很的强大. 袖珍型的SQLite能够支持高达2TB大小的数据库, ...

  7. Androidclient与服务端交互之登陆演示样例

    今天了解了一下androidclient与服务端是如何交互的,发现事实上跟web有点类似吧,然后网上找了大神的登陆演示样例.是基于IntentService的 1.后台使用简单的servlet,支持G ...

  8. PopupMenu的演示样例

    弹出菜单是停靠在一个View上的一个模式菜单. 假设View对象下方有空间,那么弹出菜单将显示在停靠对象的下方,否则会显示在上方. 这是很实用的: 源代码地址:http://download.csdn ...

  9. CountDownTimer完整具体演示样例

    MainActivity例如以下: package cc.cv; import android.os.Bundle; import android.os.CountDownTimer; import ...

随机推荐

  1. Python报错:SyntaxError: Non-ASCII character '\xe5' in file

    运行Python脚本总是报一下的错误: SyntaxError: Non-ASCII character '\xe5' in file 原因:Python默认是以ASCII作为编码方式的,如果在自己的 ...

  2. 1.Weblogic通Eclipse调试配置(Weblogic同Eclipse调试配置技术)

    概述:环境是eclipse,maven,svn, 在实际的的应用项目中,我们经常遇到本地应用程序没有问题,而部署到Weblogic上缺出现问题,查看日志并找不到原因,这时就需要调试部署上的程序与本地e ...

  3. PHP简单计算器

    工作之余,写着玩的. <?php $num1 = $_POST['num1']; $num2 = $_POST['num2']; $yusuan = $_POST['yusuan']; $jie ...

  4. cocos2d-x 读取 json 文件并用 jsoncpp 做解析

    一码胜万言(请看注释) CclUtil.h // // CclUtil.h // PracticeDemo // // Created by kodeyang on 8/1/13. // // #if ...

  5. 获取fragment中的控件的写法

    package com.example.baoxiu.fragment;import com.example.baoxiu.R;import com.example.baoxiu.Register;i ...

  6. 3.5 linux 0.11 目标文件格式

    在Linux0.11系统中,GNU gcc或gas编译输出的目标模块文件和链接程序生成的可执行文件都使用了UNIX传统的a.out格式.这是一种被称为汇编与链接输出(Assembly & li ...

  7. jquery easy ui 学习 (7) TreeGrid Actions

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. Python学习笔记 :01概述

    Python基础 首先推荐学习Python基础的教程和书籍 视频教程推荐南京大学张莉老师在cousera上的教程用Python玩转数据 入门教程<Python基础教程> 数据挖掘教程< ...

  9. UILabel的size根据文字的长短变化

     UILabel *label = [[UILabel alloc] init]; label.backgroundColor = [UIColor blackColor]; [self.view a ...

  10. 尝试跑一跑Scut

    前段时间都在用 IIS+WCF+Redis+MSSQL 的框架做服务器,前段时间看到了 Scut 的开源框架,整个架构还是蛮干净整洁的... 今天抓来跑一跑. 按照教程安装好所有的环境,版本是6.7. ...