修改界面,在顶部横条上增加一个添加按钮,点击打开一个自定义对话框,输入电话号码和拦截模式保存到数据库

自定义对话框看这篇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;@Overrideprotected 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 {@Overridepublic int getCount() {// TODO Auto-generated method stubreturn infos.size();}@Overridepublic 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() {@Overridepublic void onClick(View v) {AlertDialog.Builder builder=new AlertDialog.Builder(CallSmsSafeActivity.this);builder.setTitle("警告");builder.setMessage("是否确认删除?");builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {@Overridepublic 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;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 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() {@Overridepublic 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() {@Overridepublic void onClick(View v) {alertDialog.dismiss();}});}
}

[android] 手机卫士黑名单功能(ListView结合SQLite增删改)相关推荐

  1. [android] 手机卫士黑名单功能(列表展示)

    先把要拦截的电话号码保存到数据库中,拦截模式用个字段区分,1 电话拦截,2 短信拦截,3全部拦截 新建Activity类CallSmsSafeActivity.java 新建布局文件activity_ ...

  2. android手机卫士、3D指南针、动画精选、仿bilibli客户端、身份证银行卡识别等源码...

    Android精选源码 android身份证.银行卡号扫描源码 android仿bilibili客户端 android一款3D 指南针 源码 android手机卫士app源码 android提醒应用, ...

  3. android确认密码代码,Android手机卫士之确认密码对话框

    本文接着实现"确认密码"功能,也即是用户以前设置过密码,现在只需要输入确认密码 布局文件和<Android 手机卫士--设置密码对话框>中的布局基本类似,所有copy一 ...

  4. android 短信位置,浅析Android手机卫士之手机实现短信指令获取位置

    推荐阅读: 获取位置 新建一个service的包 新建一个GPSService类继承系统的Service类 清单文件中注册一下 重写onCreate()方法,服务创建的时候回调 重写onDestroy ...

  5. 手机卫士 java_[Java教程]Android 手机卫士2

    [Java教程]Android 手机卫士2 0 2016-10-17 21:00:07 1,自定义获取焦点的TextView FocusTextView.java 1 package com.ithe ...

  6. android 入门 006(sqlite增删改查)

    android 入门 006(sqlite增删改查) package cn.rfvip.feb_14_2_sqlite;import android.content.Context; import a ...

  7. 安卓的sqlite增删改

    基于安卓的sqlite增删改,笔记学习: 1.使用LinearLayout 布局生成,增删改的页面如图 代码布局如下: 1 <LinearLayout xmlns:android="h ...

  8. android手机卫士,安卓手机卫士

    权限列表[安卓手机卫士] ● (基于网络的)粗略位置 访问粗略的位置源(例如蜂窝网络数据库)以确定手机的大体位置(如果可以).恶意应用程序可借此确定您所处的大体位置. ● 获取定位 允许应用通过网络或 ...

  9. Android 手机卫士(1)

    Android的开发之神兵利器[Android真机/Android模拟器] 否则光秃秃的对着代码,对着UI,很枯燥de~ 我想在座de各位学习Android也正是因为有趣的可视化开发@大家 想要在手机 ...

最新文章

  1. 使用内存盘 格式化文件系统以及部署ceph-osd
  2. SpringBoot第二十五篇:2小时学会springboot
  3. JavaWeb编程(十)Json语句
  4. linux中查询动态库版本的命令,linux 程序、动态库、静态库内部添加版本号和编译时间详解...
  5. 深入浅出Node.js(八):Connect模块解析(之二)静态文件中间件
  6. HTML转PDF(C#---itextsharp)(转自别人的文章)
  7. 蚂蚁借呗和京东金条全面对比,哪个更划算?
  8. c# 从一组数中随机抽取一定个数_C#产生指定范围随机数的几种方法-亮术网
  9. 境外WiFi市场持续升温 2016年或迎普及元年
  10. mifi随身wifi选购
  11. 【zookeeper 获取节点数据getData源码解析】
  12. secoclient 主机检查失败_SecoClient在win10系统中连接失败解决方案
  13. curviloft插件怎么用_Curviloft插件下载-sketchup曲线放样插件Curviloft下载v1.7d 官方版-西西软件下载...
  14. 北京航天大学考研计算机科学与技术分数线,北京航空航天大学计算机科学与技术考研...
  15. 【树莓派】挂载移动硬盘 使用transmission 刷pt站
  16. 360浏览器自动填充表单
  17. python通过pypiwin32操作PPT
  18. 深入理解Windows域概念
  19. 做淘宝页面前的基础准备
  20. 人工智能软件怎么开发

热门文章

  1. Google推广的优势
  2. Python 神器,自动识别文字中的省市区并绘图
  3. FCPX插件-20个简洁实用数字倒计时计数器提示动画 mCounter
  4. centos下查看服务器型号命令
  5. 安卓开发实战讲解!Android开发了解这些自然无惧面试,终局之战
  6. No input file specified 出现的原因及解决方法
  7. ARFoundation入门1.0 什么是AR
  8. 【SQL】练习题184道
  9. c语言 inc文件夹,汇编 inc 和 dec 指令
  10. 闲聊HTML5的新特性