編輯:關於android開發
修改界面,在頂部橫條上增加一個添加按鈕,點擊打開一個自定義對話框,輸入電話號碼和攔截模式保存到數據庫
自定義對話框看這篇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();
}
});
}
}
APP級別處理未捕獲異常,APP級別處理捕獲
APP級別處理未捕獲異常,APP級別處理捕獲前言: 項目APP有時候會出現Crash,然後就是彈出系統強制退出的對話框,點擊關閉APP。 有的APP進行了處理,會
Android筆記——Android自定義控件,android自定義控件
Android筆記——Android自定義控件,android自定義控件目錄: 1.自定義控件概述 01_什麼是自定義控件 Android系統中,繼
PopupWindow的使用,PopupWindow使用
PopupWindow的使用,PopupWindow使用如圖是效果圖 2種常用PopupWindow的使用 下載地址:http:/
《第一行代碼》目錄
《第一行代碼》目錄 圖書目錄: 第1章 開始啟程,你的第一行Android代碼 1.1 了解全貌,Android王國簡介 1.1.1 Androi