Android之黑名单的制作【JAVA】

黑名单的制作需要用到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;
		}
	}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值