项目从listView删除,而不是从sqlite数据库中删除

发布于 2025-01-25 15:38:23 字数 8496 浏览 2 评论 0原文

我看过类似的问题,但是我的问题有些不同。 我有带有删除按钮的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

image here

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文