项目从listView删除,而不是从sqlite数据库中删除
我看过类似的问题,但是我的问题有些不同。 我有带有删除按钮的CustomListAdapter
一旦我单击此删除按钮,就会从此处删除此问题。 ListView,但不是来自SQLite数据库。每次我刷新活动时,所有数据都会恢复。
dbHandler
public class DBHandler extends SQLiteOpenHelper {
private static final int DB_VERSION = 6;
private static final String DB_NAME = "usersdb";
private static final String TABLE_Users = "plate_details";
private static final String KEY_ID = "_id";
private static final String KEY_NAME = "name";
public DBHandler(Context context){
super(context,DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db){
String CREATE_TABLE = "CREATE TABLE " + TABLE_Users + " (" +
KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
KEY_NAME + " TEXT" + ");";
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
// Drop older table if exist
db.execSQL("DROP TABLE IF EXISTS " + TABLE_Users);
// Create tables again
onCreate(db);
}
// **** CRUD (Create, Read, Update, Delete) Operations ***** //
// Adding new User Details
void insertUserDetails(String name){
//Get the Data Repository in write mode
SQLiteDatabase db = this.getWritableDatabase();
//Create a new map of values, where column names are the keys
ContentValues cValues = new ContentValues();
cValues.put(KEY_NAME, name);
// Insert the new row, returning the primary key value of the new row
long newRowId = db.insert(TABLE_Users,null, cValues);
db.close();
}
// Get User Details
public ArrayList<HashMap<String, String>> GetUsers(){
SQLiteDatabase db = this.getWritableDatabase();
ArrayList<HashMap<String, String>> userList = new ArrayList<>();
String query = "SELECT name FROM "+ TABLE_Users;
Cursor cursor = db.rawQuery(query,null);
while (cursor.moveToNext()){
HashMap<String,String> user = new HashMap<>();
user.put("name",cursor.getString(cursor.getColumnIndex(KEY_NAME)));
userList.add(user);
}
return userList;
}
// Get User Details based on userid
public ArrayList<HashMap<String, String>> GetUserByUserId(int userid){
SQLiteDatabase db = this.getWritableDatabase();
ArrayList<HashMap<String, String>> userList = new ArrayList<>();
String query = "SELECT name FROM "+ TABLE_Users;
Cursor cursor = db.query(TABLE_Users, new String[]{KEY_NAME}, KEY_ID+ "=?",new String[]{String.valueOf(userid)},null, null, null, null);
if (cursor.moveToNext()){
HashMap<String,String> user = new HashMap<>();
user.put("name",cursor.getString(cursor.getColumnIndex(KEY_NAME)));
userList.add(user);
}
return userList;
}
// Delete All Details
public void DeleteAll(String tablename) {
String selectQuery = "DELETE FROM " + TABLE_Users;
SQLiteDatabase db= this.getWritableDatabase();
db.execSQL(selectQuery);
}
public long getID (int position) {
SQLiteDatabase db = this.getWritableDatabase();
return Long.parseLong(KEY_ID);
}
// Delete User Details
public void DeleteUser(int userid){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_Users, KEY_ID+" = ?",new String[]{String.valueOf(userid)});
db.close();
}
// Update User Details
public int UpdateUserDetails(String location, String designation, int id){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cVals = new ContentValues();
int count = db.update(TABLE_Users, cVals, KEY_ID+" = ?",new String[]{String.valueOf(id)});
return count;
}
}
customListAdapter
class CustomListAdaptor extends ArrayAdapter<HashMap<String, String>> {
private Cursor mCursor;
private int mRowIdColumn;
private SQLiteDatabase db;
private static final String TAG = "";
customButtonListener customListner;
public interface customButtonListener {
public void onButtonClickListner(int position,String value);
}
public void setCustomButtonListner(customButtonListener listener) {
this.customListner = listener;
}
private Context context;
private final ArrayList<HashMap<String, String>> data;
public CustomListAdaptor(Context context, ArrayList<HashMap<String, String>> data) {
super(context, R.layout.list_row, data);
this.context = context;
this.data = data;
}
@SuppressLint("InflateParams")
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
DBHandler dba = new DBHandler(this.context);
ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(context);
convertView = inflater.inflate(R.layout.list_row, null);
viewHolder = new ViewHolder();
viewHolder.text = (TextView) convertView
.findViewById(R.id.name);
viewHolder.id = (TextView) convertView
.findViewById(R.id.id);
viewHolder.button = (Button) convertView
.findViewById(R.id.btn_lst_item_del);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
final HashMap<String, String> temp = data.get(position);
String name = temp.get("name");
String id = temp.get("id");
viewHolder.text.setText(name);
viewHolder.id.setText(id);
viewHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (customListner != null) {
Log.d(TAG,"id:" + getItemId(position));
Log.d(TAG,"item:" + getItem(position));
Log.d(TAG,"position:" + position);
dba.DeleteUser(position);
data.remove(position);
notifyDataSetChanged();
}
}
});
return convertView;
}
public static class ViewHolder {
public TextView text;
public TextView id;
Button button;
}
}
notesActivity.java
public class DetailsActivity extends AppCompatActivity implements customButtonListener {
Intent intent;
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.details);
DBHandler db = new DBHandler(this);
DBHandler qu = new DBHandler(this); // Dbhelper class object
ArrayList<HashMap<String, String>> userList = db.GetUsers();
ListView lv = (ListView) findViewById(R.id.user_list);
CustomListAdaptor adapter = new CustomListAdaptor(DetailsActivity.this, userList);
adapter.setCustomButtonListner(DetailsActivity.this);
lv.setAdapter(adapter);
Button back = (Button)findViewById(R.id.btnBack);
Button clear = (Button)findViewById(R.id.btnClear);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
intent = new Intent(DetailsActivity.this,MainActivity.class);
startActivity(intent);
}
});
clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
qu.DeleteAll("TABLE_Users");
startActivity(getIntent());
Toast.makeText(getApplicationContext(), "Cleared",Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onButtonClickListner(int position, String value) {
Toast.makeText(DetailsActivity.this, "Button click " + value,
Toast.LENGTH_SHORT).show();
}
}
I have seen similar question but mine is bit different.
I have CustomListAdapter with delete button
Issue is once I click this delete button Item gets deleted from ListView but not from SQLite databases. Every time I refreshes the activity all data comes back.
DBHandler
public class DBHandler extends SQLiteOpenHelper {
private static final int DB_VERSION = 6;
private static final String DB_NAME = "usersdb";
private static final String TABLE_Users = "plate_details";
private static final String KEY_ID = "_id";
private static final String KEY_NAME = "name";
public DBHandler(Context context){
super(context,DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db){
String CREATE_TABLE = "CREATE TABLE " + TABLE_Users + " (" +
KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
KEY_NAME + " TEXT" + ");";
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
// Drop older table if exist
db.execSQL("DROP TABLE IF EXISTS " + TABLE_Users);
// Create tables again
onCreate(db);
}
// **** CRUD (Create, Read, Update, Delete) Operations ***** //
// Adding new User Details
void insertUserDetails(String name){
//Get the Data Repository in write mode
SQLiteDatabase db = this.getWritableDatabase();
//Create a new map of values, where column names are the keys
ContentValues cValues = new ContentValues();
cValues.put(KEY_NAME, name);
// Insert the new row, returning the primary key value of the new row
long newRowId = db.insert(TABLE_Users,null, cValues);
db.close();
}
// Get User Details
public ArrayList<HashMap<String, String>> GetUsers(){
SQLiteDatabase db = this.getWritableDatabase();
ArrayList<HashMap<String, String>> userList = new ArrayList<>();
String query = "SELECT name FROM "+ TABLE_Users;
Cursor cursor = db.rawQuery(query,null);
while (cursor.moveToNext()){
HashMap<String,String> user = new HashMap<>();
user.put("name",cursor.getString(cursor.getColumnIndex(KEY_NAME)));
userList.add(user);
}
return userList;
}
// Get User Details based on userid
public ArrayList<HashMap<String, String>> GetUserByUserId(int userid){
SQLiteDatabase db = this.getWritableDatabase();
ArrayList<HashMap<String, String>> userList = new ArrayList<>();
String query = "SELECT name FROM "+ TABLE_Users;
Cursor cursor = db.query(TABLE_Users, new String[]{KEY_NAME}, KEY_ID+ "=?",new String[]{String.valueOf(userid)},null, null, null, null);
if (cursor.moveToNext()){
HashMap<String,String> user = new HashMap<>();
user.put("name",cursor.getString(cursor.getColumnIndex(KEY_NAME)));
userList.add(user);
}
return userList;
}
// Delete All Details
public void DeleteAll(String tablename) {
String selectQuery = "DELETE FROM " + TABLE_Users;
SQLiteDatabase db= this.getWritableDatabase();
db.execSQL(selectQuery);
}
public long getID (int position) {
SQLiteDatabase db = this.getWritableDatabase();
return Long.parseLong(KEY_ID);
}
// Delete User Details
public void DeleteUser(int userid){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_Users, KEY_ID+" = ?",new String[]{String.valueOf(userid)});
db.close();
}
// Update User Details
public int UpdateUserDetails(String location, String designation, int id){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cVals = new ContentValues();
int count = db.update(TABLE_Users, cVals, KEY_ID+" = ?",new String[]{String.valueOf(id)});
return count;
}
}
CustomListAdapter
class CustomListAdaptor extends ArrayAdapter<HashMap<String, String>> {
private Cursor mCursor;
private int mRowIdColumn;
private SQLiteDatabase db;
private static final String TAG = "";
customButtonListener customListner;
public interface customButtonListener {
public void onButtonClickListner(int position,String value);
}
public void setCustomButtonListner(customButtonListener listener) {
this.customListner = listener;
}
private Context context;
private final ArrayList<HashMap<String, String>> data;
public CustomListAdaptor(Context context, ArrayList<HashMap<String, String>> data) {
super(context, R.layout.list_row, data);
this.context = context;
this.data = data;
}
@SuppressLint("InflateParams")
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
DBHandler dba = new DBHandler(this.context);
ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(context);
convertView = inflater.inflate(R.layout.list_row, null);
viewHolder = new ViewHolder();
viewHolder.text = (TextView) convertView
.findViewById(R.id.name);
viewHolder.id = (TextView) convertView
.findViewById(R.id.id);
viewHolder.button = (Button) convertView
.findViewById(R.id.btn_lst_item_del);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
final HashMap<String, String> temp = data.get(position);
String name = temp.get("name");
String id = temp.get("id");
viewHolder.text.setText(name);
viewHolder.id.setText(id);
viewHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (customListner != null) {
Log.d(TAG,"id:" + getItemId(position));
Log.d(TAG,"item:" + getItem(position));
Log.d(TAG,"position:" + position);
dba.DeleteUser(position);
data.remove(position);
notifyDataSetChanged();
}
}
});
return convertView;
}
public static class ViewHolder {
public TextView text;
public TextView id;
Button button;
}
}
DetailsActivity.java
public class DetailsActivity extends AppCompatActivity implements customButtonListener {
Intent intent;
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.details);
DBHandler db = new DBHandler(this);
DBHandler qu = new DBHandler(this); // Dbhelper class object
ArrayList<HashMap<String, String>> userList = db.GetUsers();
ListView lv = (ListView) findViewById(R.id.user_list);
CustomListAdaptor adapter = new CustomListAdaptor(DetailsActivity.this, userList);
adapter.setCustomButtonListner(DetailsActivity.this);
lv.setAdapter(adapter);
Button back = (Button)findViewById(R.id.btnBack);
Button clear = (Button)findViewById(R.id.btnClear);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
intent = new Intent(DetailsActivity.this,MainActivity.class);
startActivity(intent);
}
});
clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
qu.DeleteAll("TABLE_Users");
startActivity(getIntent());
Toast.makeText(getApplicationContext(), "Cleared",Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onButtonClickListner(int position, String value) {
Toast.makeText(DetailsActivity.this, "Button click " + value,
Toast.LENGTH_SHORT).show();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论