自定义listView多选功能

最近在做一个项目的一个功能就是对售后人员进行增加和删除,今天我先讲删除的功能:

1.当你点击删除按钮会出现一个“全选”的checkbox键

2.当你点击它listview里面的item就会全被选中了。

3.如果listview其中一个item取消,checkbox键也会联动取消。


.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        style="@style/tt"
        android:layout_width="match_parent">

        <TextView
            style="@style/tt_tv"
            android:layout_centerInParent="true"
            android:text="售后人员" />

        <ImageView
            android:id="@+id/custser"
            style="@style/tt_iv"
            android:background="@drawable/title_im" />

        <ImageView
            android:id="@+id/custser_del"
            style="@style/tt_iv_right"
            android:background="@mipmap/del" />
    </RelativeLayout>

    <CheckBox
        android:id="@+id/ckb_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#666666"
        android:padding="11dp"
        android:text="全选"
        android:textColor="@color/orange"
        android:visibility="gone" />


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="@dimen/custer_padding"
            android:text="售后人员人数:"
            android:textColor="@color/black"
            android:textSize="22sp" />

        <TextView
            android:id="@+id/custser_sum"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text="18"
            android:textColor="@color/orange_deep"
            android:textSize="22sp" />


    </LinearLayout>

    <ListView
        android:id="@+id/custser_lv"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginTop="11dp"
        android:layout_weight="9"
        android:divider="@color/gray_shallow"
        android:dividerHeight="1dp" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2">

        <Button
            android:id="@+id/custser_delcomplete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:background="@drawable/btn_orange"
            android:paddingLeft="33dp"
            android:paddingRight="33dp"
            android:text="删除"
            android:textColor="@color/white"
            android:textSize="22sp"
            android:visibility="gone" />

        <ImageView
            android:id="@+id/custser_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="22dp"
            android:background="@mipmap/add" />

    </RelativeLayout>


</LinearLayout>

.java文件

public class CustSerActivity extends BaseActivity implements View.OnClickListener {
    private ListView lv;
    private TextView sum;
    private List<String> list;
    private List<CustserBean> listCustser;
    private CustSerAdapter adapter;
    public boolean mIsFromItem = false;//监听来源
    private CustSerCheckAdapter checkAdapter;//带判断的适配器
    private boolean isDel;
    private CheckBox mMainCkb;
    private Button delComplete;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        baseapp.addActivity(this);
        setContentView(R.layout.activity_cust_ser);
        initView();
    }

    private void initView() {
        mMainCkb = (CheckBox) findViewById(R.id.ckb_main);
        mMainCkb.setOnCheckedChangeListener(checkChange);
        delComplete = (Button) findViewById(R.id.custser_delcomplete);
        delComplete.setOnClickListener(this);
        findViewById(R.id.custser).setOnClickListener(this);
        findViewById(R.id.custser_del).setOnClickListener(this);
        findViewById(R.id.custser_add).setOnClickListener(this);
        sum = (TextView) findViewById(R.id.custser_sum);
        lv = (ListView) findViewById(R.id.custser_lv);
    }

    @Override
    protected void onResume() {
        super.onResume();
        initData();
    }

    /**
     * 初始化数据
     */
    private void initData() {
          /*向数据库读取数据*/
        String username = spUser.getString(SpKey.UserName);
        List<CustserBean> custser = managerDb.getCustser(username);
        list = new ArrayList<>();
        listCustser = new ArrayList<>();
        for (CustserBean custserBean : custser) {
            list.add(custserBean.getName());
            custserBean.setIscheck(false);
            listCustser.add(custserBean);
        }
        sum.setText(list.size() + "");
        /*初始化两个适配器*/
        adapter = new CustSerAdapter(this, list);
        checkAdapter = new CustSerCheckAdapter(listCustser, this, allCheckListener);
        if (isDel) {
            lv.setAdapter(checkAdapter);
        } else {
            lv.setAdapter(adapter);
        }
    }


    /*初始化listView*/
    private void initLv(ListView lv, List<String> list) {
        lv.setAdapter(adapter);
        adapter.setData(list);
        adapter.notifyDataSetChanged();
    }


    /*初始化带check的listView*/
    private void initlvCheck(ListView lv, List<CustserBean> list) {
        lv.setAdapter(checkAdapter);
        checkAdapter.setData(list);
        checkAdapter.notifyDataSetChanged();
    }


    /*全选的回调监听*/
    AllCheckListener allCheckListener = new AllCheckListener() {
        @Override
        public void onCheckedChanged(boolean b) {
            Logs.v("110  " + b + "  " + mMainCkb.isChecked());
            //根据不同的情况对maincheckbox做处理
            if (!b && !mMainCkb.isChecked()) {
                return;
            } else if (!b && mMainCkb.isChecked()) {
                mIsFromItem = true;
                mMainCkb.setChecked(false);
            } else if (b && !mMainCkb.isChecked()) {//
                mIsFromItem = true;
                mMainCkb.setChecked(true);
            } else {
                return;
            }
        }
    };

    /*mMainCkb的选择监听*/
    CompoundButton.OnCheckedChangeListener checkChange = new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            //当监听来源为点击item改变maincbk状态时不在监听改变,防止死循环
            Logs.d("mIsFromItem状态:" + mIsFromItem);
            if (mIsFromItem) {
                mIsFromItem = false;
                return;
            }

            //改变数据
            for (CustserBean model : listCustser) {
                model.setIscheck(isChecked);
            }
            //刷新listview
            checkAdapter.notifyDataSetChanged();
        }
    };

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.custser:
                baseapp.finishActivity();
                break;
            case R.id.custser_del:
                isDel();
                break;
            case R.id.custser_add:
                SmallUtil.getActivity(CustSerActivity.this, CustSerNewActivity.class);
                break;
            case R.id.custser_delcomplete:
                delComplete();
                break;
        }
    }

    /*删除后的处理*/
    private void delComplete() {
        String username = spUser.getString(SpKey.UserName);
        for (CustserBean custserBean : listCustser) {
            Logs.d("164      " + custserBean.ischeck());
            if (custserBean.ischeck()) {
                managerDb.custserClean(username, custserBean.getName());
            }
        }
        mMainCkb.setChecked(false);
        initData();
    }

    /*判断是否点击了删除按钮*/
    private void isDel() {
        if (isDel) {
            delComplete.setVisibility(View.GONE);
            mMainCkb.setVisibility(View.GONE);
            isDel = false;
            initLv(lv, list);
        } else {
            delComplete.setVisibility(View.VISIBLE);
            mMainCkb.setVisibility(View.VISIBLE);
            isDel = true;
            initlvCheck(lv, listCustser);
        }
    }
}


CustSerCheckAdapter

/**
 * Description: 有复选框售后人员的适配器
 * AUTHOR: Champion Dragon
 * created at 2018/3/22
 **/

public class CustSerCheckAdapter extends BaseAdapter {
    private List<CustserBean> list;
    private Context context;
    private AllCheckListener allCheckListener;

    public CustSerCheckAdapter(List<CustserBean> list, Context context, AllCheckListener allCheckListener) {
        this.list = list;
        this.context = context;
        this.allCheckListener = allCheckListener;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(
                    R.layout.item_custsercheck, null);
        }
        TextView name = ViewHolderUtil.get(convertView, R.id.custser_name);
        final CheckBox checkBox = ViewHolderUtil.get(convertView, R.id.custser_check);
        CustserBean custserBean = list.get(position);
        checkBox.setChecked(custserBean.ischeck());
        name.setText(custserBean.getName());
        View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (checkBox.isChecked()) {
                    checkBox.setChecked(false);
                    list.get(position).setIscheck(false);
                    Logs.w(list.get(position).ischeck() + "  是否设置勾选68");
                } else {
                    checkBox.setChecked(true);
                    list.get(position).setIscheck(true);
                    Logs.w(list.get(position).ischeck() + "  是否设置勾选72");
                }
                //监听每个item,若所有checkbox都为选中状态则更改main的全选checkbox状态
                for (CustserBean custserBean1 : list) {
                    if (!custserBean1.ischeck()) {
                        allCheckListener.onCheckedChanged(false);
                        return;
                    }
                }
                allCheckListener.onCheckedChanged(true);
            }
        };
        name.setOnClickListener(listener);
//        convertView.setOnClickListener(listener);
//        checkBox.setOnClickListener(listener);
        return convertView;
    }


    /**
     * 添加刷新的数据
     */
    public void setData(List<CustserBean> scanResults) {
        list = scanResults;
    }


}

AllCheckListener

/**
 * Description: 对item导致maincheckbox改变做监听
 * AUTHOR: Champion Dragon
 * created at 2018/3/22
 **/

public interface AllCheckListener {
    void onCheckedChanged(boolean b);
}


效果图:











猜你喜欢

转载自blog.csdn.net/xxdw1992/article/details/79890783