思路:没什么特别的思路,就是进行CRUD的操作顺序是先操作数据库,再操作列表,在通知更新
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemLongClickListener {
private ListView lv_main;
private MyBaseAdapter adapter;
private List<UserBean> userBeans;
private UserDAO dao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv_main=(ListView)findViewById(R.id.lv_main);
adapter=new MyBaseAdapter();
dao=new UserDAO(this);
userBeans=dao.getAll();
lv_main.setAdapter(adapter);
//lv_main.setOnCreateContextMenuListener(this);
lv_main.setOnItemLongClickListener(this);
}
// private int posi;
// @Override
// public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
// super.onCreateContextMenu(menu, v, menuInfo);
// menu.add(0,1,0,"更新");
// menu.add(0,2,0,"删除");
//得到长按position
// AdapterView.AdapterContextMenuInfo info=(AdapterView.AdapterContextMenuInfo) menuInfo;
// posi=info.position;
// }
//
// @Override
// public boolean onContextItemSelected(@NonNull MenuItem item) {
// UserBean userBean=userBeans.get(posi);
// switch (item.getItemId()){
// case 1:
// Toast.makeText(this,""+posi,Toast.LENGTH_SHORT).show();
// break;
// case 2:
// //删除数据库
// dao.delete(userBean.getId());
// //删除表
// userBeans.remove(posi);
// //通知更新
// adapter.notifyDataSetChanged();
// break;
// }
// return super.onContextItemSelected(item);
// }
public void add(View view){
final View inflate = View.inflate(this, R.layout.add_dialog, null);
new AlertDialog.Builder(this)
.setView(inflate)
.setPositiveButton("添加", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//保存到表中
EditText editText=(EditText)inflate.findViewById(R.id.et_add);
String str=editText.getText().toString();
UserBean ub = new UserBean(str, -1);
dao.add(ub);
//将数据加入到List中
//userBeans.add(ub);
userBeans.add(0,ub);
//通知baseadapter更新
adapter.notifyDataSetChanged();
}
})
.setNegativeButton("取消", null)
.show();
}
@Override
public boolean onItemLongClick(final AdapterView<?> parent, View view, final int position, long id) {
new AlertDialog.Builder(this)
.setPositiveButton("更新", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showUpdate(position);
}
})
.setNegativeButton("删除", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
UserBean userBean=userBeans.get(position);
dao.delete(userBean.getId());
userBeans.remove(position);
adapter.notifyDataSetChanged();
}
})
.show();
return true;
}
public void showUpdate(final int position){
final View inflate = View.inflate(this, R.layout.add_dialog, null);
new AlertDialog.Builder(this)
.setView(inflate)
.setPositiveButton("修改", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
EditText editText=(EditText) inflate.findViewById(R.id.et_add);
String str=editText.getText().toString();
UserBean user=userBeans.get(position);
user.setNumber(str);
dao.update(user);
adapter.notifyDataSetChanged();
}
})
.setNegativeButton("取消", null)
.show();
}
public class MyBaseAdapter extends BaseAdapter{
@Override
public int getCount() {
return userBeans.size();
}
@Override
public Object getItem(int position) {
return userBeans.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null){
convertView = View.inflate(MainActivity.this, R.layout.user_item, null);
}
UserBean userBean=userBeans.get(position);
TextView textView=(TextView)convertView.findViewById(R.id.number);
textView.setText(userBean.getNumber());
return convertView;
}
}
}
Dao:
对于这个也没什么特别的想法,就是构造方法的参数要注意点。
public class UserDAO {
private DBHelper dbHelper;
/**
* 增
*/
public UserDAO(Context context){
dbHelper=new DBHelper(context);
}
public void add(UserBean userBean){
//得到链接
SQLiteDatabase database=dbHelper.getReadableDatabase();
//执行sql
ContentValues values=new ContentValues();
values.put("number",userBean.getNumber());
long id= database.insert("user_number", null, values);
//这里因为上面的返回值id,是数据库的自增量,返回数据库的id
userBean.setId((int)id);
database.close();
}
/**
* 删:根据id
*/
public void delete(int id){
SQLiteDatabase database=dbHelper.getReadableDatabase();
database.delete("user_number","_id=?",new String[]{id+""});
database.close();
}
/**
* 更新记录
*/
public void update(UserBean userBean){
SQLiteDatabase database=dbHelper.getReadableDatabase();
ContentValues values=new ContentValues();
values.put("number",userBean.getNumber());
database.update("user_number",values,"_id="+userBean.getId(),null);
database.close();
}
/**
* 查询所有
*/
public List<UserBean> getAll(){
List<UserBean> list=new ArrayList<UserBean>();
SQLiteDatabase database=dbHelper.getReadableDatabase();
Cursor cursor=database.query("user_number",null,null,null,null,null,"_id desc");
while(cursor.moveToNext()){
int id=cursor.getInt(0);
String number=cursor.getString(1);
list.add(new UserBean(number, id));
}
cursor.close();
database.close();
return list;
}
}