删除自定义列表视图中的多个项目

编程入门 行业动态 更新时间:2024-10-20 05:27:09
本文介绍了删除自定义列表视图中的多个项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想创建一个自定义列表视图,其中每一行都有一个文本视图和一个图像视图(我将用它来选中/取消选中列表项),如下图所示:

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 figure:

我想从列表中删除多个项目.如何实现这一点?你能提供任何教程或参考或链接来学习这个吗??

I want to delete multiple items from the list. How to achieve this ?? Can you please provide any tutorial or reference or link to learn this ??

推荐答案

这就是我轻松创建自定义列表视图的方式:

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<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", "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<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); } }

有疑问的可以问我...

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

更多推荐

删除自定义列表视图中的多个项目

本文发布于:2023-11-10 22:23:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1576624.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   自定义   视图   项目   列表

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!