您的位置:首页 > 其它

基于ListView的单选、全选、删除功能实现小Demo

2016-05-12 22:30 686 查看
说一下思路,借助一个抽象的checkboxbean模型,来对应每一个checkbox的选中状态:,然后根据checkboxbean的属性来进行相应的操作

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息