5.3 添加移除黑名单号码

来源:互联网 发布:vc socket编程 编辑:程序博客网 时间:2024/06/04 18:53

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




 

 

 

 

原创粉丝点击