博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[android] 手机卫士黑名单功能(ListView结合SQLite增删改)
阅读量:6360 次
发布时间:2019-06-23

本文共 7566 字,大约阅读时间需要 25 分钟。

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

自定义对话框看这篇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的点击事件很相似,

参考这篇:

 

获取到删除按钮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
> 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
info=new HashMap
(); 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(); } }); }}

转载于:https://www.cnblogs.com/lenkevin/p/5497219.html

你可能感兴趣的文章
一个最简单的基于Android SearchView的搜索框
查看>>
铁路开通WiFi“钱景”不明
查看>>
电力“十三五”规划:地面光伏与分布式的分水岭
查看>>
美联社再告FBI:要求公开请黑客解锁iPhone花费
查看>>
三星电子出售希捷和夏普等四家公司股份
查看>>
任志远:当云计算遇上混合云
查看>>
思科联手发那科 用物联网技术打造无人工厂
查看>>
智慧城市首要在政府利用大数据的智慧
查看>>
2015年物联网行业:巨头展开专利大战
查看>>
以自动化测试撬动遗留系统
查看>>
网络安全初创公司存活之道
查看>>
《图解CSS3:核心技术与案例实战》——1.2节浏览器对CSS3的支持状况
查看>>
继 One Step 后,锤子科技 Big Bang 正式开源
查看>>
《数据科学:R语言实现》——2.5 使用Excel文件
查看>>
《音乐达人秀:Adobe Audition实战200例》——实例4 收音机音乐节目转录到电脑里...
查看>>
《JavaScript应用程序设计》一一3.1 过时的类继承
查看>>
Amazon 推出 API 网关使用计划
查看>>
《基于ArcGIS的Python编程秘笈(第2版)》——2.5 限制图层列表
查看>>
GNOME 地图 3.20 加入更多新特性 可用性得到加强
查看>>
《代码整洁之道:程序员的职业素养》导读
查看>>