安全卫士第九天笔记
2016-03-09 20:20
295 查看
首先,,,抱歉,今天的电话和短信拦截没有看懂,所以例子就没敢照抄了。。。。。。
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) { } });
相关文章推荐
- 完美实现Android ListView中的TextView的跑马灯效果
- android上改变listView的选中颜色
- Delphi7中Listview的常用功能汇总
- Delphi控件ListView的属性及使用方法详解
- 浅析SQL Server中的执行计划缓存(上)
- Enterprise Library for .NET Framework 2.0缓存使用实例
- PowerShell中编程清空IE缓存方法
- PowerShell中使用.NET将程序集加入全局程序集缓存
- C#中缓存的基本用法总结
- android中ListView数据刷新时的同步方法
- Android提高之ListView实现自适应表格的方法
- Android中实现水平滑动(横向滑动)ListView示例
- Android实现图片异步加载并缓存到本地
- wap开发中如何有效的利用缓存减少消息的传送量
- PHP基于文件存储实现缓存的方法
- smarty缓存用法分析
- C#实现ListView选中项向上或向下移动的方法
- 引用全局程序集缓存内的程序集的方法
- asp Response.flush 实时显示进度
- C#实现清除IE浏览器缓存的方法