您的位置:首页 > 其它

安全卫士第九天笔记

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) {
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息