Android使用ListView批量删除item的方法
作者:manymore13 发布时间:2022-05-01 01:11:17
标签:Android,ListView
本文实例讲述了Android使用ListView批量删除item的方法。分享给大家供大家参考,具体如下:
利用CheckBox选中一个或多个item,最后批量删除它们。
程序运行效果图如下:
下面开始上码:
(代码已更正,已解决滚动时紊乱的问题)
package com.test.adapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.test.adapter.ArrayAdapterActivity.ListVIewAdapter.ViewHolder;
/**
* ListView 批量删除Item
* @author manymore13
*
*/
public class ArrayAdapterActivity extends ListActivity {
private ListVIewAdapter ladapter;
private List<String> strList = new ArrayList<String>();
private List<Boolean> boolList = new ArrayList<Boolean>();
boolean visflag = false;
ListView lv;
static String str[] ={"1苹果","2香蕉","3桔子","4猕猴桃","5李子","6甘蔗","7荔枝","8桃子","9香瓜","10葡萄","11哈密瓜","12桂圆","13龙眼","14","15","16","17","18","19","20"};
CheckBox cb;
{
for(int i=0;i<str.length;i++)
{
strList.add(str[i]);
boolList.add(false);
}
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
ladapter = new ListVIewAdapter(this);
lv = this.getListView();
lv.setAdapter(ladapter);
lv.setScrollBarStyle(1);
lv.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent,
View view, int position, long id)
{
if(visflag)
{
ViewHolder viewHolder = (ViewHolder) view.getTag();
viewHolder.cb.toggle();
if(viewHolder.cb.isChecked())
{
boolList.set(position, true);
}else{
boolList.set(position, false);
}
}
}
});
}
class ListVIewAdapter extends BaseAdapter
{
Context c;
LayoutInflater mInflater ;
ListVIewAdapter(Context context)
{
c = context;
mInflater = getLayoutInflater();
}
@Override
public int getCount()
{
return strList.size();
}
@Override
public Object getItem(int position)
{
return strList.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent)
{
ViewHolder holder = null ;
if(convertView == null)
{
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.list_item, null);
holder.tv = (TextView)convertView.findViewById(R.id.textView);
holder.cb = (CheckBox)convertView.findViewById(R.id.checkBox);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.tv.setText(strList.get(position));
holder.cb.setChecked(boolList.get(position));
if(visflag)
{
holder.cb.setVisibility(View.VISIBLE);
}
else
{
holder.cb.setVisibility(View.INVISIBLE);
}
return convertView;
}
class ViewHolder
{
TextView tv;
CheckBox cb;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add(0, 0, 0, "批量处理");
menu.add(0, 1, 0, "确定删除");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case 0: // 批量处理
{
if(visflag)
{
visflag = false;
for(int i=0; i<boolList.size();i++)
{
boolList.set(i, false);
}
}
else
{
visflag = true;
}
this.ladapter.notifyDataSetInvalidated();
break;
}
case 1: //确定删除
{
if(boolList.size()>0)
{
if(visflag)
{
for(int location=0; location<boolList.size(); )
{
if(boolList.get(location))
{
boolList.remove(location);
strList.remove(location);
continue;
}
location++;
}
}
}
this.ladapter.notifyDataSetChanged();
break;
}
}
return super.onOptionsItemSelected(item);
}
}
还有list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
/>
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:visibility="gone"
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"
/>
</RelativeLayout>
</LinearLayout>
希望本文所述对大家Android程序设计有所帮助。


猜你喜欢
- OkHttp(GitHub:https://github.com/square/okhttp) 的 Interceptor 就如同名称「拦截
- 下面是我的实现经历:1.首先,我是直接使用AlertDialog来实现,确定是,形状有点难看,而且获得Dialog里面的控件略显麻烦(因为我
- 什么是委托?之前写了事件的介绍:https://www.jb51.net/article/59461.htm这里也把委托相关知识也总结一下。
- 本文实例讲述了C#数据结构之双向链表(DbLinkList)。分享给大家供大家参考,具体如下:这是继上一篇《C#数据结构之单链表(LinkL
- 集成使用1、添加 gradle 依赖implementation "com.ctrip.framework.apollo:apol
- 单选题:(每道题目2分)1. 下列哪个声明是错误的?(B) A. int i=10;B. float f=1.1;&
- 前言自己android开发也有些年头了,每每回想起作为初学者的时候自己写的代码,自己会有种喷自己的冲动,代码写的太渣了。因此想着自己要总结下
- 使用@Tolerate实现冲突兼容使用Lombok能够减少程序员的重复工作提高工作效率,而Lombok的注解基本是基于标准的(如,标准的Bu
- 思想利用栈和队列都可以实现树的迭代遍历。递归的写法将这个遍历的过程交给系统的堆栈去实现了,所以思想都是一样的、无非就是插入值的时机不一样。利
- 介绍本篇给大家带了的是ViewFlipper,它是Android自带的一个多页面管理控件,且可以自动播放! 和ViewPager不同,Vie
- 一,授权认证客户端请求服务器时,需要通过授权认证许可,方能获取服务器资源,目前比较常见的认证方式有 Basic 、JWT、Cookie。Ht
- spring配置不扫描service层原因我将contoller给springmvc进行扫描,然后其余所有交给spring扫描然后发现ser
- 一,程序执行慢导致的原因就是查询数据库慢.,导致返回值慢,那这个要怎么解决呢?1,优化数据库查询如这个文章 C#导出数据到excel如何提升
- Feign其他功能-超时设置Feign 底层依赖于 Ribbon 实现负载均衡和远程调用。Ribbon默认1秒超时。超时配置:ribbon:
- 基本要点1、Lombok作用:在我们的实体类中,我们再也不需要声明get、set、有参无参等方法,统统可以通过Lombok注解来实现同样的功
- 在日常的app使用中,我们会在android 的app中看见 热门标签等自动换行的流式布局,今天,我们就来看看如何自定义一个类似热门标签那样
- Android手势解锁本文讲述的是一个手势解锁的库,可以定制显示隐藏宫格点、路径、并且带有小九宫格显示图,和震动!让你学会使用这个简单,高效
- 经度指示南北方向,纵向纬度指示东西方向,横向获取经纬度使用GPS权限:<uses-permission android:name=&q
- 一、Jvm加载对象在说Java * 之前,还是要说一下Jvm加载对象的过程,这个依旧是理解 * 的基础性原理:Java类即源代码程序.j
- 在字符集中,有一类字符具有这样的特性:当从键盘上输入这个字符时,显示器上就可以显示这个字符,即输入什么就显示什么。这类字符称为可显示字符,如