android ListView中删除多条数据

文章标签: android,android-listview
2015-1-20 9:11:00     人阅读    

android ListView删除多个item的问题,我现在自定义了一个listVIew,里面每一行包含一个TextView 和 ImageVIew ,如下图,我现在想实现多选择删除的功能,如下图。 如何实现 ?


android listview删除多条数据

 

直接copy下面的代码运行,然后简单修改样式成为你的工程即可

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<Integer> listOfItemsToDelete;
 
    SQLiteDatabase database;
 
    private Category[] categories;
 
    ArrayList<Category> categoryList;
 
    private ArrayAdapter<Category> 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<Integer>();



        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",
 
                            "确定要从android ListView中删除Item ?删除后无法找回");
 
                }
 
            }
 
        });



        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) {



                        // 第一步:从 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<Integer> al_tmp_rec_id = new ArrayList<Integer>();
 
                            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<Category>();



        // ------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<Category> {



        LayoutInflater inflater;



        public CategoryArrayAdapter(Context context, List<Category> 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);
 
    }
}
}

上面的代码完全能够满足你的需求


原文地址:http://www.itmmd.com/201501/521.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android ViewPager改变 Fragment 中的TextView的值   上一篇
下一篇  android学习笔记(46)android基于监听的事件处理
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!