[android] 手机卫士黑名单功能(ListView结合SQLite增删改)
修改界面,在顶部横条上增加一个添加按钮,点击打开一个自定义对话框,输入电话号码和拦截模式保存到数据库
自定义对话框看这篇http://www.cnblogs.com/taoshihan/p/5370378.html

添加记录
调用Builder对象的show()方法,获取AlertDialog对象
调用View.inflate()方法,将布局文件转成View对象
调用View对象的findViewById()方法,获取确认和取消的Button对象
调用Button对象的setOnClickListener()方法,设置点击事件,匿名内部类实现OnClickListener接口,重写onClick()方法
调用AlertDialog对象的dismiss()方法,可以关闭对话框
调用View对象的findViewById()方法,获取到各个控件的值,进行判断处理
调用之前定义好的Dao类BlackNumberAdo对象的add()方法,数据库增加一条记录,参数:String电话号码,String拦截模式
此时ListView并不会显出出来刚添加的记录,需要退出这个Activity重写进入,我们通知适配器数据更新
调用集合List对象的add()方法,添加一条数据,参数:0(第一个),数据
调用ListAdapter对象的notifyDataSetChanged()方法,通知数据更新
删除记录
条目布局文件中,在右侧放置一个垃圾桶的小图标,上下居中,父控件右边
安卓系统的点击事件和js的点击事件很相似,
参考这篇:http://www.cnblogs.com/taoshihan/p/5438729.html
获取到删除按钮Button对象
调用Button对象,设置点击事件
获取AlertDialog.Builder对象,展示是否确认删除的对话框
调用AlertDialog.Builder对象,设置确认按钮和取消按钮,注意设置点击事件OnClickListener时,它所在的包是DialogInterface.OnClickListener
调用之前定义好的Dao类BlackNumberAdo对象的delete()方法,参数:String电话号码
调用集合List对象的remove()方法,删除一条数据,参数:int索引
调用ListAdapter对象的notifyDataSetChanged()方法,通知数据更新
CallSmsSafeActivity.java

package com.qingguow.mobilesafe; import java.util.HashMap;
import java.util.List;
import java.util.Map; import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast; import com.qingguow.mobilesafe.db.ado.BlackNumberAdo; /**
* 通讯卫士
*
* @author taoshihan
*
*/
public class CallSmsSafeActivity extends Activity {
private ListView listview;
private List<Map<String, String>> infos;
private BlackNumberAdo dao;
private MyAdapter myAdapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_call_sms_safe);
listview = (ListView) findViewById(R.id.lv_blacknumber);
myAdapter=new MyAdapter(); dao = new BlackNumberAdo(this);
infos = dao.findAll();
listview.setAdapter(myAdapter);
// //添加100条测试数据
// Random random=new Random();
// for(int i=1;i<=100;i++){
// ado.add("18805419000"+i, String.valueOf(random.nextInt(3)+1));
// } }
class ViewHolder{
public TextView phoneView;
public TextView modeView;
public ImageView iv_delete;
}
private class MyAdapter extends BaseAdapter { @Override
public int getCount() {
// TODO Auto-generated method stub
return infos.size();
} @Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view;
ViewHolder holder=new ViewHolder();
if(convertView==null){
view = View.inflate(CallSmsSafeActivity.this,
R.layout.list_call_sms_safe_item, null);
holder.phoneView=(TextView) view
.findViewById(R.id.tv_main_phone);
holder.modeView=(TextView) view
.findViewById(R.id.tv_block_mode);
holder.iv_delete=(ImageView) view.findViewById(R.id.iv_delete);
view.setTag(holder);
System.out.println("创建新的View对象"+position);
}else{
view=convertView;
holder=(ViewHolder) view.getTag();
System.out.println("使用历史View对象"+position);
} holder.phoneView.setText(infos.get(position).get("phone"));
switch (infos.get(position).get("mode")) {
case "1":
holder.modeView.setText("电话拦截");
break;
case "2":
holder.modeView.setText("短信拦截");
break;
case "3":
holder.modeView.setText("全部拦截");
break;
default:
break;
}
//删除条目
holder.iv_delete.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
AlertDialog.Builder builder=new AlertDialog.Builder(CallSmsSafeActivity.this);
builder.setTitle("警告");
builder.setMessage("是否确认删除?");
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
infos.remove(position);
myAdapter.notifyDataSetChanged();
dao.delete(infos.get(position).get("phone"));
}
});
builder.setNegativeButton("取消", null);
builder.show();
}
});
return view;
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
} }
private EditText blackNumber;
private CheckBox blockCall;
private CheckBox blockSms;
/**
* 添加黑名单
* @param v
*/
public void addCallSmsSafe(View v) {
AlertDialog.Builder builder=new AlertDialog.Builder(this);
View view=View.inflate(this, R.layout.dialog_add_safe_sms, null);
builder.setView(view);
final AlertDialog alertDialog=builder.show();
Button submit=(Button) view.findViewById(R.id.bt_submit);
Button cancel=(Button) view.findViewById(R.id.bt_cancel);
blackNumber=(EditText) view.findViewById(R.id.et_black_number);
blockCall=(CheckBox) view.findViewById(R.id.cb_block_call);
blockSms=(CheckBox) view.findViewById(R.id.cb_block_sms); submit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String phone=blackNumber.getText().toString().trim();
String mode = "3";
if(TextUtils.isEmpty(phone)){
Toast.makeText(CallSmsSafeActivity.this, "请输入手机号码", 0).show();
}
if(blockCall.isChecked()&&blockSms.isChecked()){
//全部拦截
mode="3";
}else if(blockCall.isChecked()){
//电话拦截
mode="1";
}else if(blockSms.isChecked()){
//短信拦截
mode="2";
}else{
Toast.makeText(CallSmsSafeActivity.this, "请勾选拦截模式", 0).show();
}
dao.add(phone, mode);
Map<String, String> info=new HashMap<String, String>();
info.put("phone", phone);
info.put("mode", mode);
infos.add(0,info);
myAdapter.notifyDataSetChanged();
alertDialog.dismiss();
}
});
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
}
});
}
}

[android] 手机卫士黑名单功能(ListView结合SQLite增删改)的更多相关文章
- [android] 手机卫士黑名单功能(列表展示)
先把要拦截的电话号码保存到数据库中,拦截模式用个字段区分,1 电话拦截,2 短信拦截,3全部拦截 新建Activity类CallSmsSafeActivity.java 新建布局文件activity_ ...
- [android] 手机卫士黑名单功能(短信拦截)
前面我们把需要拦截的手机号都存储和展示出来了,接下来是使用广播接收者拦截短信了,这个广播接收者需要和一个服务绑定,服务开启的时候,接收者存在,服务停掉时,接收者关闭 在service包下定义一个类Ca ...
- Android 手机卫士--参照文档编写选择器
本文来实现<Android 手机卫士--导航界面1的布局编写>中的图片选择器部分的代码. 本文地址:http://www.cnblogs.com/wuyudong/p/5944356.ht ...
- Android 手机卫士--设置界面&功能列表界面跳转逻辑处理
在<Android 手机卫士--md5加密过程>中已经实现了加密类,这里接着实现手机防盗功能 本文地址:http://www.cnblogs.com/wuyudong/p/5941959. ...
- Android 手机卫士--确认密码对话框编写
本文接着实现“确认密码”功能,也即是用户以前设置过密码,现在只需要输入确认密码 本文地址:http://www.cnblogs.com/wuyudong/p/5940718.html,转载请注明出处. ...
- Android 手机卫士--签名文件说明&包名说明
在<Android 手机卫士--打包生成apk维护到服务器>一文中,实现了新版本的apk到服务器,当打开客户端apk的时候,发现有新版本,提示更新.还实现了利用xutils工具实现了从服务 ...
- Android 手机卫士--弹出对话框
在<Android 手机卫士--解析json与消息机制发送不同类型消息>一文中,消息机制发送不同类型的信息还没有完全实现,在出现异常的时候,应该弹出吐司提示异常,代码如下: private ...
- android手机卫士、3D指南针、动画精选、仿bilibli客户端、身份证银行卡识别等源码
Android精选源码 android身份证.银行卡号扫描源码 android仿bilibili客户端 android一款3D 指南针 源码 android手机卫士app源码 android提醒应用, ...
- android 入门 006(sqlite增删改查)
android 入门 006(sqlite增删改查) package cn.rfvip.feb_14_2_sqlite; import android.content.Context; import ...
随机推荐
- devexpress实现单元格合并以及依据条件合并单元格
1.devexpress实现单元格合并非常的简单,只要设置属性[AllowCellMerge=True]就可以了,实现效果如下图: 2.但是在具体要求中并非需要所有的相同单元格都合并,可能需要其他的条 ...
- Tomcat 实现热部署
热部署概念 热部署是指在你对JSP或JAVA类进行了修改在不重启WEB服务器前提下能让修改生效,配置文件的修改除外 热部署好处 每次打增量包的时候就不用重新启动tomcat了 ...
- 【Zookeeper】源码分析之网络通信(一)
一.前言 前面已经分析了请求处理链中的多数类,接着继续分析Zookeeper中的网络通信模块. 二.总体框图 对于网络通信模块,其总体框图如下所示 说明: Stats,表示ServerCnxn上的统计 ...
- 【转】svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
svn提交遇到恶心的问题,可能是因为上次cleanup中断后,进入死循环了. 错误如下 解决方法:清空svn的队列 1.下载sqlite3.exe 2.找到你项目的.svn文件,查看是否存在wc.db ...
- springmvc 获取request 和 java路径分隔符 在windows 和linux 下自动判断的方法
//获取requert HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestA ...
- java基础之路(一)
Java数据类型分为内置类型和扩展类型两大类,其中的内置类型就是基本数据类型,而扩展类型则是Java语言根据基本类型扩展出的其他类型(也叫引用类型)(如:class,String等).本文主要讨论的是 ...
- win8系统不小心禁用了管理员权限怎么解决
第一步:查看系统有没有其他管理员账户 按win+x键,然后选择命令提示符 点击命令提示符打开窗口,输入net localgroup Administrators命令,然后回车 如上图,查看窗口中的&q ...
- ERP项目案例:澳科利辊业科技有限公司
企业简介: 上海澳科利公司成立于1995年,在主要股东LASERLIFE的支持下,创始人归霆先生带领他的精英团队--一支陶瓷网纹辊专业制造队伍和资深专业的柔版印刷服务机构,致力于发展中国包装印刷业,服 ...
- rdb map出错rbd sysfs write failed
创建了一个rbd镜像 $ rbd create --size 4096 docker_test 然后,在Ceph client端将该rbd镜像映射为本地设备时出错. $ rbd map docker_ ...
- redux-form的学习笔记二--实现表单的同步验证
(注:这篇博客参考自redux-form的官方英文文档)左转http://redux-form.com/6.5.0/examples/syncValidation/ 在这篇博客里,我将用redux-f ...