基于ListView的单选、全选、删除功能实现小Demo
2016-05-12 22:30
686 查看
说一下思路,借助一个抽象的checkboxbean模型,来对应每一个checkbox的选中状态:,然后根据checkboxbean的属性来进行相应的操作
1,首先来看效果图:
2,再看布局文件:
主布局:
单项布局:
3,代码
checkbox抽象模型:
Activity:
Adapter:
源码地址:https://github.com/1318526619/SelectAllDemo
1,首先来看效果图:
2,再看布局文件:
主布局:
<?xml version="1.0" encoding="utf-8"?> <!--activity_main 布局文件--> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.wang.www.selectalldemo.MainActivity"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/linearlayout"></ListView> <RelativeLayout android:id="@+id/linearlayout" android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:orientation="horizontal"> <CheckBox android:id="@+id/checkBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:checked="false" android:gravity="center" android:text="全选"/> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:text="删除"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="加载" android:id="@+id/button2" android:onClick="loadData" android:layout_centerVertical="true" android:layout_toLeftOf="@+id/button" android:layout_toStartOf="@+id/button"/> </RelativeLayout> </RelativeLayout>
单项布局:
<?xml version="1.0" encoding="utf-8"?> <!--单项布局,一个chenckbox,一个textview--> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <CheckBox android:id="@+id/checkBox_item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="false" android:text="选中"/> <TextView android:id="@+id/textView_item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第几项" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout>
3,代码
checkbox抽象模型:
/** * Created by wang on 2016/5/12. * checkbox抽象模型,用来保存每一个checkbox的选中状态 */ public class CheckBoxBean { private boolean isChecked; public CheckBoxBean() { } public CheckBoxBean(boolean isChecked) { this.isChecked = isChecked; } public boolean isChecked() { return isChecked; } public void setChecked(boolean checked) { isChecked = checked; } }
Activity:
package com.wang.www.selectalldemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ListView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private static final String TAG = "selectalldemo"; private CheckBox checkBox; private ListView listView; private Button button; MyAdapter adapter; private List<String> list = new ArrayList<>(); private List<CheckBoxBean> boxList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initList(); initBoxBeanList(); initView(); } private void initBoxBeanList() { boxList.clear(); for (int i = 0; i < list.size(); i++) { boxList.add(new CheckBoxBean(false)); } } private void initList() { list.add("0"); list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); list.add("6"); list.add("7"); list.add("8"); list.add("9"); list.add("10"); list.add("11"); list.add("12"); list.add("13"); list.add("14"); list.add("15"); list.add("16"); list.add("17"); list.add("18"); list.add("19"); list.add("20"); } private void initView() { button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { deleteCheckedItem(); } }); listView = (ListView) findViewById(R.id.listview); adapter = new MyAdapter(list,boxList,this); listView.setAdapter(adapter); checkBox = (CheckBox) findViewById(R.id.checkBox); checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { selectAll(isChecked); adapter.notifyDataSetChanged(); } }); } /** * 删除选中项 */ private void deleteCheckedItem() { int count = list.size() - 1 ; //从大都小遍历,否则,从小到大遍历的话会出现错位 for (int i = count ; i >= 0 ; i--) { if (boxList.get(i).isChecked()){ list.remove(i); } } //如果是全部删除,全选框设为未选中 if (list.size()==0){ checkBox.setChecked(false); } initBoxBeanList(); adapter.notifyDataSetChanged(); } /** * 单项中选中状态改变时,由adpater回调 * @param position * @param isChecked */ public void checkedStateChange(int position, boolean isChecked) { boxList.get(position).setChecked(isChecked); adapter.notifyDataSetChanged(); } /** * 是否全选 * @param isChecked * true:全选 * false:全不选 */ private void selectAll(boolean isChecked) { for (int i = 0; i < boxList.size(); i++) { boxList.get(i).setChecked(isChecked); } } /** * 点击加载数据,重新初始化 * @param v */ public void loadData(View v){ initList(); initBoxBeanList(); adapter.notifyDataSetChanged(); } }
Adapter:
package com.wang.www.selectalldemo; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.TextView; import java.util.List; /** * Created by wang on 2016/5/11. */ public class MyAdapter extends BaseAdapter { private static final String TAG = "selectalldemo"; private List<String> list; private List<CheckBoxBean> boxBeanList; private Context context; public MyAdapter(List<String> list, List<CheckBoxBean> boxBeanList, Context context) { this.list = list; this.boxBeanList = boxBeanList; this.context = context; } @Override public int getCount() { return list == null ? 0 : list.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.item, parent, false); holder = new ViewHolder(convertView); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.textView.setText(list.get(position)); //设置监听 holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { MainActivity mainActivity = (MainActivity) context; mainActivity.checkedStateChange(position, isChecked); } }); //根据集合中的 抽象模型的属性的设置checkbox的选中状态 holder.checkBox.setChecked(boxBeanList.get(position).isChecked()); return convertView; } class ViewHolder { CheckBox checkBox; TextView textView; public ViewHolder(View itemView) { checkBox = (CheckBox) itemView.findViewById(R.id.checkBox_item); textView = (TextView) itemView.findViewById(R.id.textView_item); } } }
源码地址:https://github.com/1318526619/SelectAllDemo
相关文章推荐
- 完美实现Android ListView中的TextView的跑马灯效果
- android上改变listView的选中颜色
- “百度与站长”更新:关于网站收录,删除,seo等
- 用vbs删除某些类型文件和磁盘空间报告的脚本
- Delphi7中Listview的常用功能汇总
- Delphi控件ListView的属性及使用方法详解
- QQ聊天记录删除了怎么恢复简单方法
- vbs删除注册表项的代码
- 迅速删除非法文件名的批处理代码
- 通过批处理实现删除运行、查找等处的历史记录的代码
- Shell中删除某些文件外所有文件的3个方法
- 删除文件提示文件正在被另一个人或程序使用的解决方法
- 关于.LDB文件 .ldb文件的产生 .ldb文件的删除方法
- jQuery根据ID获取input、checkbox、radio、select的示例
- jquery实现的代替传统checkbox样式插件
- jquery一句话全选/取消全选
- asp 合并记录集并删除的sql语句
- SQLserver 数据库危险存储过程删除与恢复方法
- sql自增长设置与删除的深入分析
- 使用 Iisext.vbs 删除 Web 服务扩展文件的方法