先看下運行結果
長按會出現一個對話框
第一步:把兩個布局畫好
第二步:來看下代碼部分(創建表、數據庫)
//創建數據庫,創建表
public class DBHelper extends SQLiteOpenHelper{
private static final String DB="course.db";//數據庫名
private static final int V=1;//數據庫版本
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
public DBHelper(Context context){
super(context,DB,null,V);
/**
* 第一個參數:上下文
* 第二個參數:數據庫名
* 第三個參數:創建數據庫的工廠方法
* 第四個參數:數據庫版本
* */
}
@Override
//創建表
public void onCreate(SQLiteDatabase sqLiteDatabase) {//表名:course 字段:EditName String,teacher String,Xs String,Xf String
sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS course(_id INTEGER PRIMARY KEY AUTOINCREMENT, EditName String,teacher String,Xs String,Xf String)");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
第二步:實體類用於承載數據
public class CourseDataBean implements Serializable {
private String editName;
private String teacher, xs, xf;
public String getEditName() {return editName;}
public void setEditName(String editName) {
this.editName = editName;
}
public String getTeacher() {
return teacher;
}
public void setTeacher(String teacher) {this.teacher = teacher;}
public String getXs() {
return xs;
}
public void setXs(String xs) {
this.xs = xs;
}
public String getXf() {
return xf;
}
public void setXf(String xf) {
this.xf = xf;
}
}
第三步:主要是對數據進行數據的增刪改查操作,是基於DBelper類來操作。
public class DBManager {
private SQLiteDatabase db;
private DBHelper mDBHelper;
private CourseDataBean course;
public DBManager(Context context) {
mDBHelper = new DBHelper(context);//實例化類
db = mDBHelper.getWritableDatabase();//對數據進行操作
}
/**
* 添加數據向CourseDataBean類中插入數據
*/
public void addData(CourseDataBean course){
db.beginTransaction();//開啟事務
try {
db.execSQL("INSERT INTO course(editName, teacher, xs, xf) VALUES(?,?,?,?)",new Object[]{course.getEditName(),course.getTeacher(),course.getXs(),course.getXf()});
db.beginTransaction();//事務成功
}finally {
db.endTransaction();//結束事務
}
}
/**
* 修改數據
* ContentValues:是一個類
*/
public void changeData(String oldCoureName ,String editName,String teacher,String xs,String xf){
ContentValues cv=new ContentValues();//實例化類
cv.put("editName",editName);//添加要更改的字段及內容
cv.put("teacher",teacher);
cv.put("xs",xs);
cv.put("xf",xf);
//執行修改
db.update("course",cv,"editName=?",new String[]{oldCoureName});
}
/**
* 通過name來刪除數據
*/
public void delData(String editName){
String[] arg={editName};
db.delete("course","editName=?",arg);
}
/**
* 執行SQL命令返回list,
* ArrayList<CourseDataBean>集合
*/
public ArrayList<CourseDataBean> info() {
//集合 泛型類
ArrayList<CourseDataBean> list = new ArrayList<CourseDataBean>();
//游標 查詢 全部字段在這張表中 第二個參數:查詢的條件
Cursor c = db.rawQuery("select * from course", null);
while (c.moveToNext()) {
//new一個對象
course = new CourseDataBean();
/**
* 從CourseDataBean讀取數據,並且把數據放到course對象中
* c.getColumnIndex("courseName"):獲取到CourseDataBean的值的下標
* c.getString(c.getColumnIndex("courseName")):獲取到它的值
* */
course.setEditName(c.getString(c.getColumnIndex("EditName")));
course.setTeacher(c.getString(c.getColumnIndex("teacher")));
course.setXs(c.getString(c.getColumnIndex("Xs")));
course.setXf(c.getString(c.getColumnIndex("Xf")));
list.add(course);
}
c.close();
return list;
}
public void closeDB(){db.close();}
}
第四步:也是最后一步,就是對主布局進行寫
private Button btn_add;
private EditText et_EditName;
private ListView listView;
private DBManager manager;
private CourseDataBean bean;
private DBHelper helper;
private EditText dialogEditName, dialogEditTeacher, dialogEditXs, dialogEditXf;
private Context context;
private List<CourseDataBean> datas;//集合
private int position;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = MainActivity.this;
manager = new DBManager(context);
bean = new CourseDataBean();//實例化
init();
}
private void init() {
//主布局控件的實例化
btn_add = (Button) findViewById(R.id.add);
btn_add.setOnClickListener(this);
et_EditName = (EditText) findViewById(R.id.EditName);
listView = (ListView) findViewById(R.id.listView);
//ListView的點擊事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
//創建對話框,添加一個布局
View view1 = View.inflate(context, R.layout.layout, null);
//承載對話框
builder.setView(view1);
position = i;
//對話框中的控件的實例化
dialogEditName = (EditText) view1.findViewById(R.id.dialog_EditName);
dialogEditTeacher = (EditText) view1.findViewById(R.id.dialog_EditTeacher);
dialogEditXf = (EditText) view1.findViewById(R.id.dialog_EditXf);
dialogEditXs = (EditText) view1.findViewById(R.id.dialog_EditXs);
//datas.get(i).getCourseName():從這個位置找到這個值賦給控件
dialogEditName.setText(datas.get(i).getEditName());
dialogEditTeacher.setText(datas.get(i).getTeacher());
dialogEditXs.setText(datas.get(i).getXs());
dialogEditXf.setText(datas.get(i).getXf());
//取消
builder.setNeutralButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
//刪除
builder.setNegativeButton("刪除", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//數據庫調用這個方法,
manager.delData(dialogEditName.getText().toString());
Toast.makeText(MainActivity.this, "刪除成功", Toast.LENGTH_SHORT).show();
//方法的作用:是為了顯示到ListView列表上
adapter1();
//對話框退出
dialogInterface.dismiss();
}
});
//保存(修改)
builder.setPositiveButton("保存", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//在這個集合中找到要修改的名字賦給name
String name = datas.get(position).getEditName();
//調用這個方法
manager.changeData(name, dialogEditName.getText().toString(), dialogEditTeacher.getText().toString(), dialogEditXs.getText().toString(), dialogEditXf.getText().toString());
adapter1();
dialogInterface.dismiss();
}
});
//創建數據庫並show出來
builder.create().show();
}
});
}
//添加
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.add:
CourseDataBean c = new CourseDataBean();//實例化對象
//給對話框中的EditText控件賦值
c.setEditName(et_EditName.getText().toString());
c.setXf("默認");
c.setXs("默認");
c.setTeacher("默認");
manager.addData(c);//添加到方法中
Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();
adapter1();
break;
}
}
private void adapter1() {
datas = manager.info();//取出數據庫里面胡數據
//數據源//創建一個集合
List<String> data = new ArrayList<>();
for (int i = 0; i < datas.size(); i++) {
data.add(datas.get(i).getEditName());
}
//創建一個數據庫
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_expandable_list_item_1, data);
//與ListView列表綁定並將數據加載到列表上
listView.setAdapter(adapter);
}
}