1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:paddingBottom="@dimen/activity_vertical_margin" 7 android:paddingLeft="@dimen/activity_horizontal_margin" 8 android:paddingRight="@dimen/activity_horizontal_margin" 9 android:paddingTop="@dimen/activity_vertical_margin" 10 tools:context="com.hanqi.blacklist.MainActivity" 11 android:orientation="vertical"> 12 13 <ListView 14 android:layout_width="match_parent" 15 android:layout_height="0dp" 16 android:layout_weight="1" 17 android:id="@+id/lv_1"> 18 </ListView> 19 <Button 20 android:layout_width="match_parent" 21 android:layout_height="wrap_content" 22 android:text="添加黑名单" 23 android:onClick="add_onClick"/> 24 </LinearLayout>
activity_main
1 package com.hanqi.blacklist.com.hanqi.blacklist.orm; 2 3 /** 4 * Created by lenovo on 2016/6/6. 5 */ 6 //实体类 7 public class BlacList { 8 9 private long id; 10 private String phoneNumber; 11 12 public long getId() { 13 return id; 14 } 15 16 public void setId(long id) { 17 this.id = id; 18 } 19 20 public String getPhoneNumber() { 21 return phoneNumber; 22 } 23 24 public void setPhoneNumber(String phoneNumber) { 25 this.phoneNumber = phoneNumber; 26 } 27 28 public BlacList(long id, String phoneNumber) { 29 this.id = id; 30 this.phoneNumber = phoneNumber; 31 } 32 33 public BlacList(String phoneNumber) { 34 this.phoneNumber = phoneNumber; 35 } 36 }
BlacList
1 package com.hanqi.blacklist.com.hanqi.blacklist.orm; 2 3 import android.content.ContentValues; 4 import android.content.Context; 5 import android.database.Cursor; 6 import android.database.sqlite.SQLiteDatabase; 7 8 import java.util.ArrayList; 9 10 /** 11 * Created by lenovo on 2016/6/6. 12 */ 13 //数据库操作类 14 public class BlackListDAO { 15 16 //private Context context; 17 private final String TABLE_NAME = "t_blacklist"; 18 private DBHelper dh; 19 20 public BlackListDAO(Context context) 21 { 22 //this.context = context; 23 dh = new DBHelper(context); 24 } 25 //增 26 //传入参数:实体类的实例 27 public long insert(BlacList blacList) 28 { 29 long rtn = 0; 30 //链接数据库 31 SQLiteDatabase sd = dh.getWritableDatabase(); 32 //执行insert语句 33 //insert into t_blacklist (phone_number) values () 34 ContentValues cv = new ContentValues(); 35 cv.put("phone_number",blacList.getPhoneNumber()); 36 rtn = sd.insert("t_blacklist",null,cv); 37 sd.close(); 38 return rtn; 39 } 40 //删 41 public int delete(long id) 42 { 43 int rtn = 0; 44 //链接数据库 45 SQLiteDatabase sd = dh.getWritableDatabase(); 46 //delete from t_blacklist where _id = ? 47 rtn = sd.delete(TABLE_NAME,"_id = ?",new String[]{id+""}); 48 sd.close(); 49 return rtn; 50 } 51 //改 52 public int update(BlacList blacList) 53 { 54 int rtn = 0; 55 //链接数据库 56 SQLiteDatabase sd = dh.getWritableDatabase(); 57 //update t_blacklist set phone_number = ? where _id = ? 58 ContentValues cv = new ContentValues(); 59 cv.put("phone_number",blacList.getPhoneNumber()); 60 rtn = sd.update(TABLE_NAME,cv,"_id =?",new String[]{blacList.getId()+""}); 61 sd.close(); 62 return rtn; 63 } 64 //查 65 //返回查询结果 66 public ArrayList<BlacList> getAll() 67 { 68 ArrayList<BlacList> blacLists = new ArrayList<>(); 69 //链接数据库 70 SQLiteDatabase sd = dh.getWritableDatabase(); 71 //select * from t_blacklist 72 //查询之后得到游标结果集 73 Cursor cursor = sd.query(TABLE_NAME, null, null, null, null, null, "_id desc"); 74 //遍历结果集 75 while (cursor.moveToNext()) 76 { 77 //1.把数据转成实体类的实例 78 BlacList blacList = new BlacList(cursor.getLong(0),cursor.getString(1)); 79 //2.把实例放在集合里,返回这个集合 80 blacLists.add(blacList); 81 } 82 cursor.close(); 83 sd.close(); 84 //返回这个集合 85 return blacLists; 86 } 87 }
BlackListDAO
1 package com.hanqi.blacklist.com.hanqi.blacklist.orm; 2 3 import android.content.Context; 4 import android.database.sqlite.SQLiteDatabase; 5 import android.database.sqlite.SQLiteOpenHelper; 6 import android.util.Log; 7 8 /** 9 * Created by lenovo on 2016/6/7. 10 */ 11 public class DBHelper extends SQLiteOpenHelper { 12 13 public DBHelper(Context context) { 14 super(context, "blacklist.db", null, 1); 15 } 16 17 @Override 18 public void onCreate(SQLiteDatabase db) { 19 20 //1.执行创建数据库的语句 21 String sql = "CREATE TABLE t_blacklist " + 22 "(_id INTEGER NOT NULL," + 23 "phone_number VARCHAR(20) NOT NULL," 24 +"PRIMARY KEY (\"_id\"))"; 25 db.execSQL(sql); 26 Log.e("TAG", "表创建成功"); 27 } 28 29 @Override 30 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 31 32 } 33 }
DBHelper
1 package com.hanqi.blacklist; 2 3 import android.app.AlertDialog; 4 import android.content.DialogInterface; 5 import android.os.Bundle; 6 import android.support.v7.app.AppCompatActivity; 7 import android.text.InputType; 8 import android.view.ContextMenu; 9 import android.view.MenuItem; 10 import android.view.View; 11 import android.view.ViewGroup; 12 import android.widget.AdapterView; 13 import android.widget.BaseAdapter; 14 import android.widget.EditText; 15 import android.widget.ListView; 16 import android.widget.TextView; 17 import android.widget.Toast; 18 19 import com.hanqi.blacklist.com.hanqi.blacklist.orm.BlacList; 20 import com.hanqi.blacklist.com.hanqi.blacklist.orm.BlackListDAO; 21 22 import java.util.ArrayList; 23 24 public class MainActivity extends AppCompatActivity { 25 26 ListView lv_1; 27 //数据访问对象 28 BlackListDAO bld = new BlackListDAO(this); 29 //数据集合 30 ArrayList<BlacList> alb; 31 32 BLAdapter bla; 33 34 //长按数据的索引 35 int index; 36 37 @Override 38 protected void onCreate(Bundle savedInstanceState) { 39 super.onCreate(savedInstanceState); 40 setContentView(R.layout.activity_main); 41 lv_1 = (ListView)findViewById(R.id.lv_1); 42 //增加上下文菜单,设置创建上下文菜单的监听器 43 lv_1.setOnCreateContextMenuListener(this); 44 //获取数据集合 45 alb = bld.getAll(); 46 //显示数据 47 //adapter 48 bla = new BLAdapter(); 49 lv_1.setAdapter(bla); 50 } 51 //重写创建上下文菜单的方法 52 @Override 53 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 54 super.onCreateContextMenu(menu, v, menuInfo); 55 menu.add(0, 1, 1, "修改"); 56 menu.add(0, 2, 2, "删除"); 57 //获取长按的数据信息 58 //1.得到菜单信息 59 AdapterView.AdapterContextMenuInfo acmi = 60 (AdapterView.AdapterContextMenuInfo)menuInfo; 61 //2.得到数据在集合中的索引 62 index = acmi.position; 63 } 64 //响应菜单点击的回调方法 65 @Override 66 public boolean onContextItemSelected(MenuItem item) { 67 68 switch (item.getItemId()) 69 { 70 case 1: 71 //修改 72 final EditText editText = new EditText(this); 73 editText.setHint("输入电话号码"); 74 editText.setInputType(InputType.TYPE_CLASS_PHONE); 75 editText.setText(alb.get(index).getPhoneNumber()); 76 new AlertDialog.Builder(this) 77 .setTitle("修改") 78 .setView(editText) 79 .setCancelable(false) 80 .setNegativeButton("取消", null) 81 .setPositiveButton("确定", new DialogInterface.OnClickListener() { 82 @Override 83 public void onClick(DialogInterface dialog, int which) { 84 // BlacList blacList = new BlacList(alb.get(index).getId(),editText.getText().toString()); 85 // bld.update(blacList); 86 // alb = bld.getAll(); 87 // bla.notifyDataSetChanged(); 88 //1.得到新数据的实体类 89 //赋值: 90 // 1)传值,复制新的值再传递,值类型; 91 // 2)传址,传递的是内存的地址,指向同一个对象,引用类型 92 BlacList blaclist = alb.get(index); 93 blaclist.setPhoneNumber(editText.getText().toString()); 94 //2.调用DAO的update() 95 if (bld.update(blaclist)>0) 96 { 97 Toast.makeText(MainActivity.this, "修改成功", Toast.LENGTH_SHORT).show(); 98 99 bla.notifyDataSetChanged(); 100 } 101 else 102 { 103 Toast.makeText(MainActivity.this, "修改失败", Toast.LENGTH_SHORT).show(); 104 } 105 } 106 }) 107 .show(); 108 break; 109 case 2: 110 //添加删除确认对话框 111 //删除 112 new AlertDialog.Builder(this) 113 .setTitle("确认对话框") 114 .setMessage("确认删除么?") 115 .setNegativeButton("取消", null) 116 .setPositiveButton("确认", new DialogInterface.OnClickListener() { 117 @Override 118 public void onClick(DialogInterface dialog, int which) { 119 bld.delete(alb.get(index).getId()); 120 Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_SHORT).show(); 121 //alb = bld.getAll(); 122 alb.remove(index); 123 bla.notifyDataSetChanged(); 124 } 125 }) 126 .show(); 127 128 break; 129 } 130 return super.onContextItemSelected(item); 131 } 132 133 //BaseAdapter的实现类 134 class BLAdapter extends BaseAdapter 135 { 136 @Override 137 public int getCount() { 138 return alb.size(); 139 } 140 141 @Override 142 public Object getItem(int position) { 143 return alb.get(position); 144 } 145 146 @Override 147 public long getItemId(int position) { 148 return alb.get(position).getId(); 149 } 150 151 @Override 152 public View getView(int position, View convertView, ViewGroup parent) { 153 //得到数据 154 BlacList blacList = alb.get(position); 155 //得到视图 156 if (convertView == null) 157 { 158 //构建视图 159 convertView = new TextView(MainActivity.this); 160 } 161 //视图和数据做显示匹配 162 TextView textView = (TextView)convertView; 163 textView.setTextSize(20); 164 textView.setHeight(80); 165 textView.setText(blacList.getPhoneNumber()); 166 return textView; 167 } 168 } 169 //添加 170 public void add_onClick(View v) 171 { 172 //自定义对话框 173 final EditText editText = new EditText(this); 174 editText.setHint("输入电话号码"); 175 editText.setInputType(InputType.TYPE_CLASS_PHONE); 176 //构建对话框 177 new AlertDialog.Builder(this) 178 .setTitle("添加黑名单") 179 .setView(editText) 180 .setCancelable(false) 181 .setNegativeButton("取消", null) 182 .setPositiveButton("保存", new DialogInterface.OnClickListener() { 183 @Override 184 public void onClick(DialogInterface dialog, int which) { 185 //向数据库保存 186 //1.定义实体类 187 BlacList blacList = new BlacList(editText.getText().toString()); 188 //2.通过DAO插入数据 189 long l = bld.insert(blacList); 190 if (l > 0) { 191 Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show(); 192 //更新list 193 //alb = bld.getAll(); 194 blacList.setId(l); 195 alb.add(0,blacList); 196 //刷新列表 197 bla.notifyDataSetChanged(); 198 } 199 else { 200 Toast.makeText(MainActivity.this, "保存失败", Toast.LENGTH_SHORT).show(); 201 } 202 } 203 }) 204 .show(); 205 } 206 }
MainActivity
时间: 2024-11-05 22:06:06