delete multiple items in custom listview

后端 未结 2 434
春和景丽
春和景丽 2020-12-04 02:32

I want to create a custom listview in which every single row has a textview and an imageview(which i\'ll use to check/uncheck the list items) as shown in the following figur

2条回答
  •  隐瞒了意图╮
    2020-12-04 03:08

    This is how i created my custom listview with ease:

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.AlertDialog.Builder;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.pm.ActivityInfo;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class DeleteData extends Activity {
    
        Cursor cursor;
        ListView lv_delete_data;
        static ArrayList listOfItemsToDelete;
        SQLiteDatabase database;
        private Category[] categories;
        ArrayList categoryList;
        private ArrayAdapter listAdapter;
        ImageView iv_delete;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_delete_data);
    
            this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    
            manage_reload_list();
    
            listOfItemsToDelete = new ArrayList();
    
            iv_delete = (ImageView) findViewById(R.id.imageViewDeleteDataDelete);
            iv_delete.setClickable(true);
            iv_delete.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (listOfItemsToDelete.isEmpty()) {
    
                        Toast.makeText(getBaseContext(), "No items selected.",
                                Toast.LENGTH_SHORT).show();
                    }
    
                    else {
                        showDialog(
                                "Warning",
                                "Are you sure you want to delete these categories ? This will erase all records attached with it.");
                    }
                }
            });
    
            lv_delete_data = (ListView) findViewById(R.id.listViewDeleteData);
            lv_delete_data.setAdapter(listAdapter);
            lv_delete_data.setOnItemClickListener(new OnItemClickListener() {
    
                @Override
                public void onItemClick(AdapterView arg0, View arg1, int arg2,
                        long arg3) {
                    // TODO Auto-generated method stub
                    ImageView imageView = (ImageView) arg1
                            .findViewById(R.id.imageViewSingleRowDeleteData);
                    Category category = (Category) imageView.getTag();
    
                    if (category.getChecked() == false) {
                        imageView.setImageResource(R.drawable.set_check);
                        listOfItemsToDelete.add(category.getId());
                        category.setChecked(true);
                    } else {
                        imageView.setImageResource(R.drawable.set_basecircle);
                        listOfItemsToDelete.remove((Integer) category.getId());
                        category.setChecked(false);
                    }
                }
            });
        }
    
        private void showDialog(final String title, String message) {
    
            AlertDialog.Builder adb = new Builder(DeleteData.this);
            adb.setTitle(title);
            adb.setMessage(message);
            adb.setIcon(R.drawable.ic_launcher);
            String btn = "Ok";
            if (title.equals("Warning")) {
                btn = "Yes";
                adb.setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
            }
    
            adb.setPositiveButton(btn, new DialogInterface.OnClickListener() {
    
                public void onClick(DialogInterface arg0, int arg1) {
    
                    if (title.equals("Warning")) {
    
                        for (int i : listOfItemsToDelete) {
    
                            // -------first delete from category table-----
    
                            database.delete("category_fields", "cat_id=?",
                                    new String[] { i + "" });
    
                            // --------now fetch rec_id where cat_id =
                            // i-----------------
    
                            cursor = database.query("records_data",
                                    new String[] { "rec_id" }, "cat_id=?",
                                    new String[] { i + "" }, null, null, null);
                            if (cursor.getCount() == 0)
                                cursor.close();
                            else {
                                ArrayList al_tmp_rec_id = new ArrayList();
                                while (cursor.moveToNext())
                                    al_tmp_rec_id.add(cursor.getInt(0));
                                cursor.close();
    
                                for (int i1 : al_tmp_rec_id) {
                                    database.delete("records_fields_data",
                                            "rec_id=?", new String[] { i1 + "" });
    
                                    database.delete("record_tag_relation",
                                            "rec_id=?", new String[] { i1 + "" });
                                }
    
                                // ---------delete from records_data-------
    
                                database.delete("records_data", "cat_id=?",
                                        new String[] { i + "" });
    
                                cursor.close();
                            }
                        }
    
                        showDialog("Success",
                                "Categories, with their records, deleted successfully.");
                    } else {
                        database.close();
                        listOfItemsToDelete.clear();
                        manage_reload_list();
                        lv_delete_data.setAdapter(listAdapter);
                    }
                }
            });
    
            AlertDialog ad = adb.create();
            ad.show();
        }
    
        protected void manage_reload_list() {
    
            loadDatabase();
    
            categoryList = new ArrayList();
    
            // ------first fetch all categories name list-------
    
            cursor = database.query("category", new String[] { "cat_id",
                    "cat_description" }, null, null, null, null, null);
            if (cursor.getCount() == 0) {
                Toast.makeText(getBaseContext(), "No categories found.",
                        Toast.LENGTH_SHORT).show();
                cursor.close();
            } else {
    
                while (cursor.moveToNext()) {
    
                    categories = new Category[] { new Category(cursor.getInt(0),
                            cursor.getString(1)) };
                    categoryList.addAll(Arrays.asList(categories));
                }
                cursor.close();
            }
            listAdapter = new CategoryArrayAdapter(this, categoryList);
        }
    
        static class Category {
    
            String cat_name = "";
            int cat_id = 0;
            Boolean checked = false;
    
            Category(int cat_id, String name) {
                this.cat_name = name;
                this.cat_id = cat_id;
            }
    
            public int getId() {
                return cat_id;
            }
    
            public String getCatName() {
                return cat_name;
            }
    
            public Boolean getChecked() {
                return checked;
            }
    
            public void setChecked(Boolean checked) {
                this.checked = checked;
            }
    
            public boolean isChecked() {
                return checked;
            }
    
            public void toggleChecked() {
                checked = !checked;
            }
        }
    
        static class CategoryViewHolder {
    
            ImageView imageViewCheck;
            TextView textViewCategoryName;
    
            public CategoryViewHolder(ImageView iv_check, TextView tv_category_name) {
                imageViewCheck = iv_check;
                textViewCategoryName = tv_category_name;
            }
    
            public ImageView getImageViewCheck() {
                return imageViewCheck;
            }
    
            public TextView getTextViewCategoryName() {
                return textViewCategoryName;
            }
        }
    
        static class CategoryArrayAdapter extends ArrayAdapter {
    
            LayoutInflater inflater;
    
            public CategoryArrayAdapter(Context context, List categoryList) {
    
                super(context, R.layout.single_row_delete_data,
                        R.id.textViewSingleRowDeleteData, categoryList);
                inflater = LayoutInflater.from(context);
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
    
                Category category = (Category) this.getItem(position);
    
                final ImageView imageViewCheck;
                final TextView textViewCN;
    
                if (convertView == null) {
    
                    convertView = inflater.inflate(R.layout.single_row_delete_data,
                            null);
    
                    imageViewCheck = (ImageView) convertView
                            .findViewById(R.id.imageViewSingleRowDeleteData);
                    textViewCN = (TextView) convertView
                            .findViewById(R.id.textViewSingleRowDeleteData);
    
                    convertView.setTag(new CategoryViewHolder(imageViewCheck,
                            textViewCN));
                }
    
                else {
    
                    CategoryViewHolder viewHolder = (CategoryViewHolder) convertView
                            .getTag();
                    imageViewCheck = viewHolder.getImageViewCheck();
                    textViewCN = viewHolder.getTextViewCategoryName();
                }
    
                imageViewCheck.setFocusable(false);
                imageViewCheck.setFocusableInTouchMode(false);
                imageViewCheck.setClickable(true);
                imageViewCheck.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        ImageView iv = (ImageView) v;
                        Category category = (Category) iv.getTag();
    
                        if (category.getChecked() == false) {
                            imageViewCheck.setImageResource(R.drawable.set_check);
                            listOfItemsToDelete.add(category.getId());
                            category.setChecked(true);
                        } else {
                            imageViewCheck
                                    .setImageResource(R.drawable.set_basecircle);
                            listOfItemsToDelete.remove((Integer) category.getId());
                            category.setChecked(false);
                        }
                    }
                });
                imageViewCheck.setTag(category);
    
                if (category.getChecked() == true)
                    imageViewCheck.setImageResource(R.drawable.set_check);
                else
                    imageViewCheck.setImageResource(R.drawable.set_basecircle);
    
                textViewCN.setText(category.getCatName());
    
                return convertView;
            }
        }
    
        private void loadDatabase() {
            database = openOrCreateDatabase("WalletAppDatabase.db",
                    SQLiteDatabase.OPEN_READWRITE, null);
        }
    
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
    
                finish();
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }
    }
    

    Anyone who have doubts in this can ask me...

提交回复
热议问题