Android——黑名单管理(二)
说明:多加一点完善
1.在操作类 DAO 将连接数据库也放到了构造方法中(错误),加删除全部的方法
2.主界面增加了姓名一栏,用layout文件将对话框分离出来
3.删除加确认提示
4.加删除全部按钮
BlackNumber.java
package com.example.chenshuai.test321; /**
* Created by chenshuai on 2016/4/16.
*/
//实体类 只负责装载数据
public class BlackNumber { private long id;
private String name;
private String phonenumber; //生成get和set方法
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public long getId() {
return id;
} public void setId(long id) {
this.id = id;
} public String getPhonenumber() {
return phonenumber;
} public void setPhonenumber(String phonenumber) {
this.phonenumber = phonenumber;
} //生成构造方法
public BlackNumber() {
} public BlackNumber(String name, String phonenumber) {
this.name = name;
this.phonenumber = phonenumber;
} public BlackNumber(long id,String name,String phonenumber) { this.id = id;
this.name = name;
this.phonenumber = phonenumber;
} //生成tostring方法
@Override
public String toString() {
return "BlackNumber{" +
"id=" + id +
", name='" + name + '\'' +
", phonenumber='" + phonenumber + '\'' +
'}';
}
}
BlackNumberDAO.java
package com.example.chenshuai.test321; import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log; import java.util.ArrayList;
import java.util.List; /**
* Created by chenshuai on 2016/4/16.
*/
//数据库操作类
public class BlackNumberDAO { private DBHelper dbHelper; //构造方法 初始化 操作工具类DBHelper 连接数据库
public BlackNumberDAO(Context context)
{
dbHelper = new DBHelper(context);
} //增
public void insert(BlackNumber blackNumber)
{
//连接数据库
SQLiteDatabase sd = dbHelper.getWritableDatabase(); //添加数据
ContentValues cv = new ContentValues(); //要添加数据的键值对集合
cv.put("name",blackNumber.getName());
cv.put("phone_number",blackNumber.getPhonenumber()); //数据添加
sd.insert("black_number",null,cv); //关闭数据库
sd.close(); Log.e("TAG", "添加数据成功");
} //查询
//用List<实体类的实例>返回数据
public List<BlackNumber> getAll()
{
//连接数据库
SQLiteDatabase sd = dbHelper.getWritableDatabase();
//List 接口 ArrayList 实现类
List<BlackNumber> bln = new ArrayList<BlackNumber>();
//查询数据
//连接数据库
//SQLiteDatabase sd = dbHelper.getWritableDatabase(); //返回游标
Cursor cursor = sd.query("black_number", null, null, null, null, null, "_id desc"); //遍历 移动游标,获取数据
while (cursor.moveToNext())
{
//构造实体类的实例,放入List
bln.add(new BlackNumber(cursor.getLong(0),cursor.getString(1),cursor.getString(2))); }
Log.e("TAG", "数据的记录条数" + cursor.getCount());
sd.close();
return bln;
} //改
public void update(BlackNumber blackNumber)
{
//连接数据库
SQLiteDatabase sd = dbHelper.getWritableDatabase();
//要添加数据的键值对集合
ContentValues cv = new ContentValues();
cv.put("name",blackNumber.getName());
cv.put("phone_number",blackNumber.getPhonenumber()); sd.update("black_number",cv,"_id=?",new String[]{String.valueOf(blackNumber.getId())}); sd.close(); Log.e("TAG", "修改数据成功");
} //删
public void delete(long id)
{
//连接数据库
SQLiteDatabase sd = dbHelper.getWritableDatabase();
//删除数据
sd.delete("black_number", "_id=?", new String[]{String.valueOf(id)}); sd.close(); Log.e("TAG", "删除数据成功");
} //全部删除
public void deleteAll()
{
//连接数据库
SQLiteDatabase sd = dbHelper.getWritableDatabase();
//删除全部数据
sd.delete("black_number",null,null);
sd.close();
Log.e("TAG", "删除数据成功"); }
}
activity_activity_black_number.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.chenshuai.test321.Activity_blackNumber"
android:orientation="vertical"> <ListView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@android:id/list">
</ListView>
<TextView
android:id="@android:id/empty"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="还没有一个黑名单"
android:textSize="30sp"
android:gravity="center"/> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加"
android:textSize="20sp"
android:onClick="tianjiaonclick"/> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="全部删除"
android:textSize="20sp"
android:onClick="quanbusconclick"/> </LinearLayout>
layout_duihuakuang.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="match_parent"
android:orientation="vertical"> <TextView
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="添加黑名单"
android:textSize="30dp"
android:gravity="center_vertical"
android:paddingLeft="20dp"
android:id="@+id/tv_bt_1"/>
<EditText
android:layout_width="match_parent"
android:layout_height="60dp"
android:hint="输入姓名"
android:textSize="20dp"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:id="@+id/et_bt_1"
android:inputType="text"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="60dp"
android:hint="输入黑名单号"
android:textSize="20dp"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:id="@+id/et_bt_2"
android:inputType="number"
/> </LinearLayout>
layout_blacknumber_xianshi.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="match_parent"
android:orientation="vertical"> <TextView
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="显示姓名"
android:textSize="25sp"
android:id="@+id/tv_bt_2"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:layout_marginTop="10dp"
android:background="#ADADAD"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="显示电话"
android:textSize="20sp"
android:id="@+id/tv_bt_3"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:background="#e0e0e0"
/> </LinearLayout>
Activity_blackNumber.java
package com.example.chenshuai.test321; import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast; import java.util.List; public class Activity_blackNumber extends ListActivity { private List<BlackNumber> data;
private listviewAdapter lad;
private int position;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity_black_number); ListView lv_1 = getListView(); //构建数据
BlackNumberDAO bln = new BlackNumberDAO(Activity_blackNumber.this); data = bln.getAll(); //适配器
lad = new listviewAdapter();
lv_1.setAdapter(lad); //设置上下文菜单
lv_1.setOnCreateContextMenuListener(this); } //创建上下文菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
//添加两个item
menu.add(0,1,1,"修改");
menu.add(0, 2, 2, "删除"); //获取长按的适配器信息(删除要用)
AdapterView.AdapterContextMenuInfo menuInfo1 = (AdapterView.AdapterContextMenuInfo)menuInfo;
position = menuInfo1.position; super.onCreateContextMenu(menu, v, menuInfo);
} //给选项加点击事件
@Override
public boolean onContextItemSelected(MenuItem item) { final BlackNumber bt = data.get(position); switch (item.getItemId())
{
//修改
case 1:
LayoutInflater inflater = getLayoutInflater();
final View v = inflater.inflate(R.layout.layout_duihuakuang, null); final EditText et_1 = (EditText)v.findViewById(R.id.et_bt_1);
final EditText et_2 = (EditText)v.findViewById(R.id.et_bt_2); //获取默认值
et_1.setText(bt.getName());
et_2.setText(bt.getPhonenumber()); new AlertDialog.Builder(this)
.setView(v)
.setNegativeButton("取消",null)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) { //获取修改后的值
bt.setName(et_1.getText().toString());
bt.setPhonenumber(et_2.getText().toString()); //执行修改数据库操作
BlackNumberDAO blackNumberDAO = new BlackNumberDAO(Activity_blackNumber.this); blackNumberDAO.update(bt); //更新集合
//BlackNumber bt = data.get(position)
//bt和data里面的对象同时指向的是同一个内存地址
//如果bt被修改了,data里面的对象也同时发生变化
//这就是引用类型的特点 //通知刷新列表
lad.notifyDataSetChanged();
Toast.makeText(Activity_blackNumber.this, "修改成功!", Toast.LENGTH_SHORT).show();
}
})
.setCancelable(false)
.show(); break; //删除
case 2:
new AlertDialog.Builder(this)
.setMessage("确定要删除吗?")
.setNegativeButton("取消",null)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) { //在数据库删除 需要id
BlackNumberDAO blackNumberDAO = new BlackNumberDAO(Activity_blackNumber.this); blackNumberDAO.delete(bt.getId()); //刷新界面
//移除集合中的记录
data.remove(position); //通知刷新
lad.notifyDataSetChanged(); Toast.makeText(Activity_blackNumber.this, "删除成功", Toast.LENGTH_SHORT).show();
}
})
.setCancelable(false)
.show();
break;
}
return super.onContextItemSelected(item); } //抽象类 要继承并实现抽象方法后才能使用 实现适配器
class listviewAdapter extends BaseAdapter
{
@Override
public int getCount() {
return data.size();
} @Override
public Object getItem(int position) {
return data.get(position);
} @Override
public long getItemId(int position) {
return data.get(position).getId();
} @Override
public View getView(int position, View convertView, ViewGroup parent) { //判断可复用的视图是否为空
if (convertView == null)
{
//获取视图
//1.获取layout文件 用加载器
LayoutInflater layoutInflater = getLayoutInflater();
convertView = layoutInflater.inflate(R.layout.layout_blacknumber_xianshi,null); }
//给视图绑定数据
TextView tv_1 = (TextView) convertView.findViewById(R.id.tv_bt_2);
TextView tv_2 = (TextView) convertView.findViewById(R.id.tv_bt_3); tv_1.setText(data.get(position).getName());
tv_2.setText(data.get(position).getPhonenumber());
return convertView; } } //添加数据按钮
public void tianjiaonclick(View view)
{
//1.获取加载器
LayoutInflater layoutInflater = getLayoutInflater();
//2.用加载器加载文件
final View v = layoutInflater.inflate(R.layout.layout_duihuakuang,null); new AlertDialog.Builder(this)
.setView(v)
.setCancelable(false)
.setNegativeButton("取消", null)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) { EditText et_1 = (EditText)v.findViewById(R.id.et_bt_1);
EditText et_2 = (EditText)v.findViewById(R.id.et_bt_2); String name = et_1.getText().toString();
String number = et_2.getText().toString(); //1.构造实体类 参数为输入的电话号码
BlackNumber blackNumber = new BlackNumber(name,number); BlackNumberDAO blackNumberDAO = new BlackNumberDAO(Activity_blackNumber.this); //2.用数据库操作类 DAO 保存数据
blackNumberDAO.insert(blackNumber); //添加数据到集合
//给add添加索引值从上往下加数据
data.add(0,blackNumber); //通知适配器刷新ListView
lad.notifyDataSetChanged(); }
})
.show();
} //全部删除
public void quanbusconclick(View view)
{
new AlertDialog.Builder(this)
.setMessage("确定要删除吗?")
.setNegativeButton("取消",null)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) { //在数据库删除
BlackNumberDAO blackNumberDAO = new BlackNumberDAO(Activity_blackNumber.this); blackNumberDAO.deleteAll(); //刷新界面
//移除集合中的记录
while (position < data.size()) {
data.remove(position);
} //通知刷新
lad.notifyDataSetChanged(); Toast.makeText(Activity_blackNumber.this, "删除所有数据成功", Toast.LENGTH_SHORT).show();
}
})
.setCancelable(false)
.show(); }
}
Android——黑名单管理(二)的更多相关文章
- 【转】Android LCD(二):LCD常用接口原理篇
关键词:android LCD TFT TTL(RGB) LVDS EDP MIPI TTL-LVDS TTL-EDP 平台信息:内核:linux2.6/linux3.0系统:android/ ...
- 【转】android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)
关键词:android camera CMM 模组 camera参数 CAMIF平台信息:内核:linux系统:android 平台:S5PV310(samsung exynos 4210) 作者 ...
- Android进阶(二十八)上下文菜单ContextMenu使用案例
上下文菜单ContextMenu使用案例 前言 回顾之前的应用程序,发现之前创建的选项菜单无法显示了.按照正常逻辑来说,左图中在"商品信息"一栏中应该存在选项菜单,用户可进行分享等 ...
- Android进阶(二十)AndroidAPP开发问题汇总(四)
· Android进阶(二十)AndroidAPP开发问题汇总(四) android:layout_width和android:width的区别 基中的android:layout_width和and ...
- Android生成二维码--保存和分享二维码图片
之前写过生成自定义二维码的两篇文章:<Android生成自定义二维码><Android生成二维码–拍照或从相册选取图片>,下面就介绍一下Android应用内如何保存以及分享二维 ...
- Android 利用二次贝塞尔曲线模仿购物车加入物品抛物线动画
Android 利用二次贝塞尔曲线模仿购物车加入物品抛物线动画 0.首先.先给出一张效果gif图. 1.贝塞尔曲线原理及相关公式參考:http://www.jianshu.com/p/c0d7ad79 ...
- Android LCD(二):LCD常用接口原理篇(转)
源: Android LCD(二):LCD常用接口原理篇
- Android Studio(二):快捷键设置、插件安装
Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...
- Android—ZXing二维码扫描遇到的问题
最近工作中需要开发带有二维码扫描功能的软件(基于开源项目ZXing),遇到的问题记录一下,也希望给大家带来帮助. 1.首先因为扫描要开摄像机所以加权限是一定的,不然后面什么都不能进行 <uses ...
随机推荐
- 浅谈cocos2dx(18) 中工厂模式
----我的生活.我的点点滴滴! ! cocos2d-x中也有工厂模式.何为工厂模式,顾名思义就是用来产生产品的,工厂就是用来创建其它类对象的类,我们把这个创建其它类对象的类叫做工厂类.而这些被创建的 ...
- Android中Is library配置的作用
在Android开发中如果用eclipse开发的话,在配置的时候会有一个选项,Is library一直没有研究明白,经过上网查找,有人归纳了用法,归纳的很好作为保留.解决了我多个项目共享资源的好方法. ...
- C#日期格式转换大全
有时候我们要对时间进行转换,达到不同的显示效果 默认格式为:2005-6-6 14:33:34 如果要换成成200506,06-2005,2005-6-6或更多的该怎么办呢 我们要用到:DateTim ...
- Chrome封掉不在chrome商店中的插件解决办法
添加chrome的管理模板,chrome.adm文件:下载地址:链接:http://pan.baidu.com/s/1c08st7i 密码: e811 然后进行如下的设置,重启chrome就可以解除封 ...
- databus编译: Execution failed for task ':databus-core:databus-core-impl:compileJava'.
在编译databus的过程中,出现了无法找到jdk的错误: 在/etc/.bashrc和/etc/profile中都配置了JAVA_HOME,依然报错,重启后还是报错,原因的是ubuntu中默认的jd ...
- vs 2017打包安装包(印象深刻)
Visual Studio Install 打包安装项目2017 以下是具体步骤 一.安装环境 1.下载:链接地址 2.安装vs2017的时候需要安装依赖 .NET framework 4.6 .下载 ...
- 怎么删除Elasticsearch里的index内容
DELETE testindex 请求方式为 DELETE, 跟库名
- JVM调优——之CMS GC日志分析
最近在学习JVM和GC调优,今天总结下CMS的一些特点和要点,让我们先简单的看下整个堆年轻代和年老代的垃圾收集器组合(以下配合java8完美支持,其他版本可能稍有不同),其中标红线的则是我们今天要着重 ...
- JS验证邮箱格式是否正确 实例代码
如何用js验证邮箱格式是否正确?分享一个例子.代码: /* *验证邮箱格式是否正确 *参数strEmail,需要验证的邮箱 */ function chkEmail(strEmail) { if (! ...
- html5+css3 权威指南阅读笔记(三)---表单及其它新增和改良元素
一.新增元素及属性 1.表单内元素的form属性. html5: <form id="testForm"> <input type=text> </f ...