黑名单的制作需要用到ListView,数据库存储,对数据进行操作,还有Dialog,适配器
1.界面布局:上面有ListView,界面下方有一个添加按钮,可以向ListView列表中添加数据,当无数据时ListView隐藏。显示“还没有一个黑名单”,此时的ListView和TextView不能同时存在,So,其id必须用系统特定的。
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
</ListView>
<TextView
android:id="@android:id/empty"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:text="还没有一个黑名单" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="add"
android:text="添 加" />
2.black_number表对应的类
package com.example.sqlite;
/**
* black_number表对应的类
* @author Xiaocici
*
*/
public class BlackNumber {
private int id;
private String number;
public BlackNumber(int id, String number) {
super();
this.id = id;
this.number = number;
}
@Override
public String toString() {
return "BlackNumber [id=" + id + ", number=" + number + "]";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
3.数据库操作的帮助类
package com.example.sqlite;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/**
* 数据库操作的帮助类
* @author Xiaocici
*
*/
public class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context, "black.db", null, 1);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建表
db.execSQL("create table black_number(_id integer primary key autoincrement,number varchar)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
4.操作black_number表的DAO类
package com.example.sqlite;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
/**
* 操作black_number表的DAO类
* @author Xiaocici
*
*/
public class BlackNumberDao {
private DBHelper dbhelper;
public BlackNumberDao(Context context) {
dbhelper = new DBHelper(context);
}
/*
* 添加一条记录
*/
public void add(BlackNumber blackNumber){
//1.得到连接
SQLiteDatabase database = dbhelper.getReadableDatabase();
//2.执行insert insert into black_number (number) values(XXX)
ContentValues values = new ContentValues();
values.put("number", blackNumber.getNumber());
long id = database.insert("black_number", null, values);
Log.i("TAG", "id = "+ id);
//设置ID
blackNumber.setId((int) id);
//3.关闭
database.close();
}
/*
* 根据ID删除一条记录
*/
public void deleteById(int id){
//1.得到连接
SQLiteDatabase database = dbhelper.getReadableDatabase();
//2.执行delete delete from black_number where _id=id
int deleteCount = database.delete("black_number", "_id=?", new String[]{id+""});
Log.i("TAG", "deleteCount="+ deleteCount);
//3.关闭
database.close();
}
/**
* 更新一条记录
*/
public void update(BlackNumber blackNumber){
//1.得到连接
SQLiteDatabase database = dbhelper.getReadableDatabase();
//2.执行update update black_number set number=xxx where _id=id;
ContentValues values = new ContentValues();
values.put("number", blackNumber.getNumber());
int updateCount = database.update("black_number", values, "_id="+blackNumber.getId(), null);
Log.i("TAG", "updateCount="+ updateCount);
//3.关闭
database.close();
}
/**
* 查询所有记录封装成List<BlackNumber>
*/
public List<BlackNumber> getAll(){
List<BlackNumber> list = new ArrayList<BlackNumber>();
//1.得到连接
SQLiteDatabase database = dbhelper.getReadableDatabase();
//2.执行query select * from black_number
Cursor cursor = database.query("black_number", null, null, null, null, null, "_id desc");
//3.从cursor中取出所有数据并封装到List中
while(cursor.moveToNext()){
//id
int id = cursor.getInt(0);
//number
String number = cursor.getString(1);
list.add(new BlackNumber(id,number));
}
//3.关闭
cursor.close();
database.close();
return list;
}
}
5.菜单监听事件
public boolean onContextItemSelected(MenuItem item) {
//得到对应的BlackNumber对象
final BlackNumber blackNumber = data.get(position);
switch (item.getItemId()) {
case 1://更新
//1.显示更新的Dialog
showUpdateDialog(blackNumber);
break;
case 2://删除
new AlertDialog.Builder(this)
.setTitle("确定删除???")
.setPositiveButton("Yes", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
//1).删除数据表对应数据
dao.deleteById(blackNumber.getId());
//2).删除List对应的数据
data.remove(position);
//3).通知更新列表
adapter.notifyDataSetChanged();
}
})
.setNegativeButton("No", null).show();
break;
default:
break;
}
return super.onContextItemSelected(item);
}
6.更改数据函数
/**
* 显示更新的Dialog
* @param blackNumber
*/
private void showUpdateDialog(final BlackNumber blackNumber) {
final EditText editText = new EditText(this);
editText.setHint(blackNumber.getNumber());
new AlertDialog.Builder(this)
.setTitle("更新黑名单")
.setView(editText)
.setPositiveButton("更新", new OnClickListener( ) {
@Override
public void onClick(DialogInterface dialog, int which) {
//1)更新List对应数据
String number = editText.getText().toString();
blackNumber.setNumber(number);
//2)更新数据表对应的数据
dao.update(blackNumber);
//3)通知更新列表
adapter.notifyDataSetChanged();
}
})
.setNegativeButton("取消", null)
.show();
}
7.添加数据函数
public void add(View v){
final EditText editText = new EditText(this);
editText.setHint("输入黑名单号");
new AlertDialog.Builder(this)
.setTitle("添加黑名单")
.setView(editText)
.setPositiveButton("添加", new OnClickListener( ) {
@Override
public void onClick(DialogInterface dialog, int which) {
//1.保存数据表中
String number = editText.getText().toString();
boolean flag = false;
for(int i=0;i<data.size();i++){
if(data.get(i).getNumber().equals(number)){
flag = true;
break;
}
}
if (!flag) {
BlackNumber blackNumber = new BlackNumber(-1,
number);
dao.add(blackNumber);
// 2.保存数据到List
// data.add(blackNumber);//已经有ID了
data.add(0, blackNumber);// 已经有ID了
// 3.通知更新列表
adapter.notifyDataSetChanged();
}else{
Toast.makeText(MainActivity.this, "该number已存在", 0).show();
}
}
})
.setNegativeButton("取消", null)
.show();
}
8.该ListView所需的适配器
class BlackNumberAdapter extends BaseAdapter {
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView==null){
convertView = View.inflate(MainActivity.this, android.R.layout.simple_list_item_1, null);
}
BlackNumber blackNumber = data.get(position);
TextView textView = (TextView) convertView.findViewById(android.R.id.text1);
textView.setText(blackNumber.getNumber());
return convertView;
}
}