安全卫士第九天笔记

23 篇文章 0 订阅
20 篇文章 0 订阅

首先,,,抱歉,今天的电话和短信拦截没有看懂,所以例子就没敢照抄了。。。。。。

listview复用缓存完整版
 //完整版的复用缓存的精髓在于把findbyid的操作也进行了缓存的处理
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            BlackNumInfo numInfo = list.get(position);
            ViewHolder viewHolder;
            View view;
            if (convertView == null) {
                viewHolder = new ViewHolder();
                view = View.inflate(getApplicationContext(), R.layout.item_calll_smss_safe_ayout, null);
                viewHolder.call_safe_number = (TextView) view.findViewById(R.id.call_safe_number);
                viewHolder.call_safe_mode = (TextView) view.findViewById(R.id.call_safe_mode);
                viewHolder.iv_delete = (ImageView) view.findViewById(R.id.iv_delete);
                view.setTag(viewHolder);
            } else {
                view = convertView;
                viewHolder = (ViewHolder) view.getTag();
            }
            viewHolder.call_safe_number.setText(numInfo.getBlackNum());
            switch (numInfo.getMode()) {
                case BlackNumDao.SMS:
                    viewHolder.call_safe_mode.setText("短信拦截");
                    break;
                case BlackNumDao.ALL:
                    viewHolder.call_safe_mode.setText("拦截所有");
                    break;
                case BlackNumDao.CALL:
                    viewHolder.call_safe_mode.setText("电话拦截");
                    break;
            }
            return view;
        }
    }
    //复用缓存找id
    class ViewHolder {
        TextView call_safe_number, call_safe_mode;
        ImageView iv_delete;
    }
}
删除黑名单操作
    viewHolder.iv_delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    AlertDialog.Builder builder= new AlertDialog.Builder(CallSmsSafeActivity.this);
                    builder.setTitle("删除黑名单");
                    builder.setTitle("您确定删除"+numInfo.getBlackNum()+"吗?");
                    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                       //删除数据库中的数据
                            blackNumDao.deleteBlackNum(numInfo.getBlackNum());
                       //删除list集合中的数据
                            list.remove(position);
                       //更新界面的数据
                            myAdapter.notifyDataSetChanged();
                        }
                    });
                    builder.setNegativeButton("取消",null);
                    builder.show();
                }
            });
            return view;
        }
    }
添加黑名单的操作

//添加黑名单操作
    public void add(View view) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        View view1 = View.inflate(getApplicationContext(), R.layout.dialog_addblacknum, null);
        final EditText add_safeNum;
        final RadioGroup add_safeNum_mode;
        add_safeNum = (EditText) view1.findViewById(R.id.add_safeNum);
        add_safeNum_mode = (RadioGroup) view1.findViewById(R.id.Add_safeNum_mode);
        Button ok_1 = (Button)view1. findViewById(R.id.add_safeNum_ok);
        Button cancle = (Button) view1.findViewById(R.id.add_safeNum_cancle);
        ok_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String blackNum = add_safeNum.getText().toString().trim();
                if (TextUtils.isEmpty(blackNum)) {
                   Toast.makeText(getApplicationContext(), "亲,不能为空", Toast.LENGTH_LONG).show();
                    return;
                }
                int radioButtonId = add_safeNum_mode.getCheckedRadioButtonId();
                int mode = -1;
                switch (radioButtonId) {
                    case R.id.Add_safeNum_sms:
                        mode = 0;
                        break;
                    case R.id.Add_safeNum_tell:
                        mode = 1;
                        break;
                    case R.id.Add_safeNum_all:
                        mode = 2;
                        break;
                }
                //添加到数据库中
                blackNumDao.AddBlackNum(blackNum, mode);
                //添加到list中
                list.add(0,new BlackNumInfo(mode, blackNum));
                myAdapter.notifyDataSetChanged();
                dialog.dismiss();
            }
        });
        cancle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        });
        builder.setView(view1);
        dialog = builder.create();
        dialog.show();
    }

每次查询20条数据到listview中显示
    1.创建加载部分数据的方法
  //分批加载数据库中的数据
    public List<BlackNumInfo> query(int max, int startIndex) {
        List<BlackNumInfo> list = new ArrayList<>();
        SQLiteDatabase database = blackNum.getReadableDatabase();
        //Cursor cursor = database.rawQuery("", new String[]{MaxNum+"",startindex+""});
        //查询指定条数的数据
        Cursor cursor = database.rawQuery("select blacknum,mode from info order by _id desc limit ? offset ?", new String[]{max + "", startIndex + ""});
        while (cursor.moveToNext()) {
            String number = cursor.getString(0);
            int mode = cursor.getInt(1);
            BlackNumInfo blackNumInfo = new BlackNumInfo(mode, number);
            list.add(blackNumInfo);
        }
        cursor.close();
        database.close();
        return list;
    }
    2.更改加载数据方式
      @Override
            public void doinBacks() {
                //这样做的目的在于list中的数据就不是每次只有20条了
                if (list == null) {
                    list = blackNumDao.query(Max, startIndex);
                } else {
                    list.addAll(blackNumDao.query(Max, startIndex));
                }
            }
            @Override
            public void postTask() {
                //这样做的目的在于不用每次都去加载新的Adapter,已经存在的话,就只要刷新就行
                if (myAdapter == null) {
                    myAdapter = new MyAdapter();
                    sms_safe_lv.setAdapter(myAdapter);
                } else {
                    myAdapter.notifyDataSetChanged();
                }
                sms_safe_pg.setVisibility(View.INVISIBLE);
            }
    3.实现滑动加载更多操作
   //listView的滑动监听事件
        sms_safe_lv.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                //判断是否停止滑动
                if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
                    int postion = sms_safe_lv.getLastVisiblePosition();//滑动停止的位置
                    //判断滑动停止的位置是不是当前listview加载的总条数
                    if (list.size() - 1 == postion) {
                        startIndex += postion;
                        filldate();
                    }
                }
            }
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            }
        });







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值