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();
            
      }
      
      
      
}




 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值