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