Android之黑名单的制作【JAVA】

来源:互联网 发布:linux网络重启命令 编辑:程序博客网 时间:2024/05/15 23:51

黑名单的制作需要用到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;}@Overridepublic 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}@Overridepublic void onCreate(SQLiteDatabase db) {//创建表db.execSQL("create table black_number(_id integer primary key autoincrement,number varchar)");}@Overridepublic 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);//设置IDblackNumber.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=idint 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()){//idint id = cursor.getInt(0);//numberString 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.显示更新的DialogshowUpdateDialog(blackNumber);break;case 2://删除new AlertDialog.Builder(this).setTitle("确定删除???").setPositiveButton("Yes", new OnClickListener() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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 {@Overridepublic int getCount() {return data.size();}@Overridepublic Object getItem(int position) {return data.get(position);}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubif(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;}}



0 0
原创粉丝点击