移除黑名单号码"/>
5.3 添加移除黑名单号码
1.点击添加按钮显示自定义对话框布局
2.给自定义对话框中控件设置点击事件
3.刷新界面要移除集合中对应的数据
public class CallSmsSafeActivity extends Activity {
private String TAG = "CallSmsSafeActivity" ; private ListView lv_callsms_safe ; private BlackNumberDao dao ; private BlackNumberBean blackNumberBean ; private List<BlackNumberBean> numberList ; private TextView tv_number ; private TextView tv_mode ; private ImageView iv_delete ; private MyAdapter adpter ; private LinearLayout loading ; private int currentNumber =0; //分页参数 private int maxNumber =20; private int totalCount ; private boolean loadingflag ; /** * 创建消息处理机制 */ private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super .handleMessage(msg); Log. i( TAG , "主线程跟新界面" ); loading .setVisibility(View. GONE ); //加载到布局时移除 if ( adpter == null ){ adpter = new MyAdapter(); lv_callsms_safe .setAdapter( adpter ); } else { //复用旧的数据适配器,通知数据适配器数据跟新了 adpter .notifyDataSetChanged(); loadingflag = false ; //标记已加载完 } } }; /** * Activity创建时 */ @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout. activity_callsms_safe ); lv_callsms_safe =(ListView) findViewById(R.id. lv_callsms_safe ); loading =(LinearLayout) findViewById(R.id. loading ); loading .setVisibility(View. VISIBLE ); //加载布局可见 dao = new BlackNumberDao( this ); //首次加载数据 fillDate(); totalCount = dao .getMaxNumber(); Log. i( TAG , "数据库总条目数:" + totalCount ); //给lv 注册滚动监听事件 lv_callsms_safe .setOnScrollListener( new OnScrollListener() { // 滚动状态发生改变的时候 调用的方法 @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case OnScrollListener. SCROLL_STATE_IDLE : // listview静止状态 // 获取最后一个可见条目对应的集合里面数据的位置. 从0开始 int lastPosition = lv_callsms_safe .getLastVisiblePosition(); // 获取集合的大小 从1开始 int total = numberList .size(); if (lastPosition == (total - 1)) { Log. i( TAG , "拖动到了最后一个条目,加载更多的数据..." ); if ( loadingflag ) { Toast. makeText(getApplicationContext(), "正在加载数据." ,0).show(); } currentNumber += maxNumber ; if ( currentNumber >= totalCount ) { Toast. makeText(getApplicationContext(), "没有更多的数据了" ,0).show(); return ; }
fillDate(); }
break ; case OnScrollListener. SCROLL_STATE_TOUCH_SCROLL : //手指触摸滚动 break ; case OnScrollListener. SCROLL_STATE_FLING : //手指已经离开 惯性滑翔状态 break ;
} } //滚动的时候调用的方法 @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); }
/** * 查询数据 */ private void fillDate() { loadingflag = true ; //标记正在加载数据 new Thread(){ public void run() { //numberList=dao.getPraNumberInfo(currentPage, pageSize); if ( numberList == null ) { numberList = dao .getPraNumberInfo( currentNumber , maxNumber ); } else { numberList .addAll( dao .getPraNumberInfo( currentNumber , maxNumber )); } handler .sendEmptyMessage(0); }; }.start(); } /** * 创建适配器 */ public class MyAdapter extends BaseAdapter{
@Override public int getCount() { return numberList .size(); } @Override public View getView( final int position, View convertView, ViewGroup parent) { //复用历史缓存view对象,减少内存消耗,防止内存溢出 View view= null ; ViewHolder holder= null ; if (convertView!= null &&convertView instanceof RelativeLayout){ //RelativeLayout:填充view的布局类型 view=convertView; Log. i( TAG , "复用历史缓存view:" +position); holder=(ViewHolder) view.getTag(); //复用孩子的id } else { view = View. inflate(getApplicationContext(), R.layout. list_callsms_item , null ); Log. i( TAG , "创建新的view对象:" +position); holder= new ViewHolder(); //初始化view持有者 //只是在创建view的时候去寻找控件,然后把控件的id存起来 holder. tv_number =(TextView) view.findViewById(R.id. tv_number ); holder. tv_mode =(TextView) view.findViewById(R.id. tv_mode ); holder. iv_delete =(ImageView) view.findViewById(R.id. iv_delete ); view.setTag(holder); //将holder存到view中 } //非常消耗内存 //View view = View.inflate(getApplicationContext(), R.layout.list_callsms_item,null); blackNumberBean = numberList .get(position); holder. tv_number .setText( "号码:" + blackNumberBean .getNumber()); String mode= blackNumberBean .getMode(); if ( "1" .equals(mode)){ holder. tv_mode .setText( "电话拦截" ); } else if ( "2" .equals(mode)){ holder. tv_mode .setText( "短信拦截" ); } else if ( "3" .equals(mode)){ holder. tv_mode .setText( "全部拦截" ); } //给删除图标注册点击事件 holder. iv_delete .setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { Log. i( TAG , "删除号码:" + blackNumberBean .getNumber()); dao .delete( blackNumberBean .getNumber()); numberList .remove(position); //集合中移除listview对应的条目 adpter .notifyDataSetChanged(); //刷新界面 } }); return view; }
@Override public Object getItem( int position) { return null ; }
@Override public long getItemId( int position) { return 0; } } /** * 创建view持有者,将需要找的控件的应用放在 viewholder中 */ static class ViewHolder{ TextView tv_number ; TextView tv_mode ; ImageView iv_delete ; } private EditText et_blacknumber ; private RadioGroup gr_mode ; private Button bt_ok ; private Button bt_cancle ; /** * 添加按钮触发的点击事件 */ public void addBlackNumber(View view){ AlertDialog.Builder builder= new Builder( this ); //创建对话框建设者 final AlertDialog dialog = builder.create(); //创建对话框 //将自定义对话框布局填充到对话框上 View contentView=View. inflate( this , R.layout. dialog_enter_blacknumber , null ); et_blacknumber =(EditText) contentView.findViewById(R.id. et_blacknumber ); gr_mode =(RadioGroup) contentView.findViewById(R.id. radioGroup1 ); bt_ok =(Button) contentView.findViewById(R.id. bt_ok ); bt_cancle =(Button) contentView.findViewById(R.id. bt_cancle ); //给取消按钮设置点击事件 bt_cancle .setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { Log. i( TAG , "取消对话框" ); dialog.dismiss(); } }); //给确定按钮选择点击事件 bt_ok .setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { String et_number= et_blacknumber .getText().toString().trim(); if (TextUtils. isEmpty(et_number)){ Toast. makeText(getApplicationContext(), "输入的号码不能为空" , 0).show(); return ; } if ( dao .find(et_number)){ //如果输入的号码已经存在 Toast. makeText(getApplicationContext(), "输入的号码已经在黑名单中" , 0).show(); return ; } //判断选择的模式 String mode= "3" ; switch ( gr_mode .getCheckedRad ioButtonId()) { case R.id. rb_phone : // 1. 电话拦截 mode= "1" ; break ;
case R.id. rb_sms : // 2. 短信拦截 mode= "2" ; break ; case R.id. rb_all : // 3. 全部拦截 mode= "3" ; break ; } //添加黑名单号吗 dao .add(et_number,mode); //将新添加的黑名单号码添加到集合中,显示到界面上 最上面一个条目 numberList .add(0, new BlackNumberBean(0, et_number, mode)); adpter .notifyDataSetChanged(); // 刷新界面 dialog.dismiss(); } }); dialog.setView(contentView, 0, 0, 0, 0); dialog.show(); } }
更多推荐
5.3 添加移除黑名单号码
发布评论