Sqlite的使用和一个简单的书籍管理系统(下)
来源:互联网 发布:蒙特卡洛算法 matlab 编辑:程序博客网 时间:2024/05/16 05:53
运行效果如下 我们一步一步来实现
之前我们是完成了布局和sqlite建库和基本的工具类现在我们来开始写业务逻辑
来写一个MainActivity
public class MainActivity extends Activity { private ListView mBookListView; private EditText edtname; private EditText edtprice; private SimpleCursorAdapter simpleCursorAdapter; private Cursor cursor; private Context context;//因为要经常使用上下文 所以新建一个context @SuppressWarnings("deprecation") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.book_item); context = this; edtname = (EditText) findViewById(R.id.name_et); edtprice = (EditText) findViewById(R.id.price_et); mBookListView = (ListView) findViewById(android.R.id.list); // ListView要展示批量结构化的数据1.列表项 2.初始数据 3.适配器4.监听 // 2初始数据 cursor = new DButils(this).findcursor(); // 3.游标适配器 将数据库里面的文字和数据传给控件显示出来 simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.activity_main, cursor, new String[] { DButils.ID, DButils.NAME, DButils.PRICE, DButils.ID }, new int[] { R.id.id_tv, R.id.name_tv, R.id.price_tv, R.id.delete_tv }); // FLAG_REGISTER_CONTENT_OBSERVER :注册内容观察 mBookListView.setAdapter(simpleCursorAdapter); // 4长按监听 mBookListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { DButils dbUtils = new DButils(context); cursor.moveToPosition(position); int id1 = cursor.getInt(cursor.getColumnIndex("_id")); Toast.makeText(getApplicationContext(), "通过位置取得的" + id + "通过游标取得" + id1, Toast.LENGTH_SHORT).show(); dbUtils.delete((int) id); //刷新操作!!!!增删都要用到 cursor.requery(); // 假如查询数据库,建议开启子线程 simpleCursorAdapter.notifyDataSetChanged(); // 发一个通知刷新,关联的listview刷新 return false; } }); } // 添加记录 public void add(View v) { DButils dButils = new DButils(context); String name=edtname.getText().toString().trim(); String price=edtprice.getText().toString().trim(); ContentValues values=new ContentValues(); values.put(dButils.NAME, name); values.put(dButils.PRICE, price); dButils.save(values); cursor.requery(); // 假如查询数据库,建议开启子线程 simpleCursorAdapter.notifyDataSetChanged(); // 发一个通知刷新,关联的listview刷新 edtname.setText(""); edtprice.setText(""); } // 删除记录 public void delete(View v) { TextView textView = (TextView) v; String string = textView.getText().toString(); DButils dButils = new DButils(context); dButils.delete(Integer.valueOf(string)); cursor.requery(); // 假如查询数据库,建议开启子线程 simpleCursorAdapter.notifyDataSetChanged(); // 发一个通知刷新,关联的listview刷新 } @Override protected void onDestroy() { // TODO Auto-generated method stub System.out.println("ondestory"); if (cursor != null) { cursor.close(); } super.onDestroy(); }}
逻辑很清楚,注释我也写的很明白了。就有个点要注意一下
SimpleCursorAdapter适配器是继承了CursorAdapter
继承关系如下
CursorAdapter 继承了 BaseAdapter
好处:仅加载需要显示的数据,性能好
使用方法:
1.实现两个参数构造方法
2.重写newView()方法
layout->view
3.重写bindView()方法
view.set
数据更新:
adapter.changeCursor(cursor);
adapter.notifyDataSetChanged();
我们上面的例子是使用
cursor.requery(); // 假如查询数据库,建议开启子线程 simpleCursorAdapter.notifyDataSetChanged(); // 发一个通知刷新,关联的listview刷新
来更新simpleCursorAdapter,并且传递给listview
代码如下:
public void createCursorAdapter(Cursor cursor) { //游标适配器,构造方法,传入cursor mAdapter = new CursorAdapter(this, cursor) {//重写两个方法 @Override public View newView(Context context, Cursor cursor, ViewGroup parent) {//找到布局和控件 ViewHolder holder = new ViewHolder(); LayoutInflater inflater = getLayoutInflater(); View inflate = inflater.inflate(R.layout.listview_item, null); holder.item_tv_name = (TextView) inflate.findViewById(R.id.item_tv_name); holder.item_tv_phone = (TextView) inflate.findViewById(R.id.item_tv_phone); inflate.setTag(holder); return inflate;//返回的view传给bindView。 } @Override public void bindView(View view, Context context, Cursor cursor) {//复用布局。// 把数据设置到界面上 ViewHolder holder = (ViewHolder) view.getTag(); String name = cursor.getString(cursor.getColumnIndex("name")); String phone = cursor.getString(cursor.getColumnIndex("phone")); holder.item_tv_name.setText(name); holder.item_tv_phone.setText(phone); } }; };
再有就是那个删除标志的用法哪里要注意,把字体设置为透明。Textview的点击事件clickable设置为true。点击传text里面的id。
那个id有时候自己重写geTItemId()方法时会覆盖。这里暂且就不研究了,遇到了再说。。。看到这里,自己编一遍跑一下吧!
0 0
- Sqlite的使用和一个简单的书籍管理系统(下)
- Sqlite的使用和一个简单的书籍管理系统(上)
- Win7下SQLite的简单使用
- iOS 下Sqlite的简单使用
- Android数据库SQLite使用详解二 : 学生管理系统的简单实现
- 【SQLite】SQLite的简单使用
- android Sqlite的简单封装和使用
- 求一个简单的仓库管理系统
- 一个简单的商品管理系统
- 一个简单的学生管理系统
- 一个简单的企业进销存管理系统 .
- 一个简单备份管理系统的实现
- 一个简单JAVAWEB的台管理系统
- 一个简单的学生管理系统
- 一个简单的学生管理系统
- SQLite的简单使用
- 简单SQLite的使用
- SQLite的简单使用
- 【XJB研究】关于几种LCA求法的时间
- 关于python中的__new__方法
- 数据库事务隔离级别
- PHP Startup redis: Unable to initialize module
- BZOJ 4539|HNOI 2016|树|可持久化线段树|LCA ******
- Sqlite的使用和一个简单的书籍管理系统(下)
- 使用Ant,第1部分:将Ant脚本引入Java项目
- Linux查看物理CPU个数、核数、逻辑CPU个数
- 学习总结二
- 深拷贝、浅拷贝以及Prototype模式
- nginx https配置以及 api接口版本号rewrite
- idea
- 容器(Context)使用之支付系统
- 段错误信息的获取