最近在做一个项目的一个功能就是对售后人员进行增加和删除,今天我先讲删除的功能:
1.当你点击删除按钮会出现一个“全选”的checkbox键
2.当你点击它listview里面的item就会全被选中了。
3.如果listview其中一个item取消,checkbox键也会联动取消。
.xml文件
.java文件
public class CustSerActivity extends BaseActivity implements View.OnClickListener {private ListView lv;private TextView sum;private List list;private List listCustser;private CustSerAdapter adapter;public boolean mIsFromItem &#61; false;//监听来源private CustSerCheckAdapter checkAdapter;//带判断的适配器private boolean isDel;private CheckBox mMainCkb;private Button delComplete;&#64;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);baseapp.addActivity(this);setContentView(R.layout.activity_cust_ser);initView();}private void initView() {mMainCkb &#61; (CheckBox) findViewById(R.id.ckb_main);mMainCkb.setOnCheckedChangeListener(checkChange);delComplete &#61; (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 &#61; (TextView) findViewById(R.id.custser_sum);lv &#61; (ListView) findViewById(R.id.custser_lv);}&#64;Overrideprotected void onResume() {super.onResume();initData();}/*** 初始化数据*/private void initData() {/*向数据库读取数据*/String username &#61; spUser.getString(SpKey.UserName);List custser &#61; managerDb.getCustser(username);list &#61; new ArrayList<>();listCustser &#61; new ArrayList<>();for (CustserBean custserBean : custser) {list.add(custserBean.getName());custserBean.setIscheck(false);listCustser.add(custserBean);}sum.setText(list.size() &#43; "");/*初始化两个适配器*/adapter &#61; new CustSerAdapter(this, list);checkAdapter &#61; new CustSerCheckAdapter(listCustser, this, allCheckListener);if (isDel) {lv.setAdapter(checkAdapter);} else {lv.setAdapter(adapter);}}/*初始化listView*/private void initLv(ListView lv, List list) {lv.setAdapter(adapter);adapter.setData(list);adapter.notifyDataSetChanged();}/*初始化带check的listView*/private void initlvCheck(ListView lv, List list) {lv.setAdapter(checkAdapter);checkAdapter.setData(list);checkAdapter.notifyDataSetChanged();}/*全选的回调监听*/AllCheckListener allCheckListener &#61; new AllCheckListener() {&#64;Overridepublic void onCheckedChanged(boolean b) {Logs.v("110 " &#43; b &#43; " " &#43; mMainCkb.isChecked());//根据不同的情况对maincheckbox做处理if (!b && !mMainCkb.isChecked()) {return;} else if (!b && mMainCkb.isChecked()) {mIsFromItem &#61; true;mMainCkb.setChecked(false);} else if (b && !mMainCkb.isChecked()) {//mIsFromItem &#61; true;mMainCkb.setChecked(true);} else {return;}}};/*mMainCkb的选择监听*/CompoundButton.OnCheckedChangeListener checkChange &#61; new CompoundButton.OnCheckedChangeListener() {&#64;Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {//当监听来源为点击item改变maincbk状态时不在监听改变&#xff0c;防止死循环Logs.d("mIsFromItem状态&#xff1a;" &#43; mIsFromItem);if (mIsFromItem) {mIsFromItem &#61; false;return;}//改变数据for (CustserBean model : listCustser) {model.setIscheck(isChecked);}//刷新listviewcheckAdapter.notifyDataSetChanged();}};&#64;Overridepublic 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 &#61; spUser.getString(SpKey.UserName);for (CustserBean custserBean : listCustser) {Logs.d("164 " &#43; 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 &#61; false;initLv(lv, list);} else {delComplete.setVisibility(View.VISIBLE);mMainCkb.setVisibility(View.VISIBLE);isDel &#61; true;initlvCheck(lv, listCustser);}}
}
CustSerCheckAdapter
/*** Description: 有复选框售后人员的适配器* AUTHOR: Champion Dragon* created at 2018/3/22**/public class CustSerCheckAdapter extends BaseAdapter {private List list;private Context context;private AllCheckListener allCheckListener;public CustSerCheckAdapter(List list, Context context, AllCheckListener allCheckListener) {this.list &#61; list;this.context &#61; context;this.allCheckListener &#61; allCheckListener;}&#64;Overridepublic int getCount() {return list.size();}&#64;Overridepublic Object getItem(int position) {return list.get(position);}&#64;Overridepublic long getItemId(int position) {return position;}&#64;Overridepublic View getView(final int position, View convertView, ViewGroup parent) {if (convertView &#61;&#61; null) {convertView &#61; LayoutInflater.from(context).inflate(R.layout.item_custsercheck, null);}TextView name &#61; ViewHolderUtil.get(convertView, R.id.custser_name);final CheckBox checkBox &#61; ViewHolderUtil.get(convertView, R.id.custser_check);CustserBean custserBean &#61; list.get(position);checkBox.setChecked(custserBean.ischeck());name.setText(custserBean.getName());View.OnClickListener listener &#61; new View.OnClickListener() {&#64;Overridepublic void onClick(View v) {if (checkBox.isChecked()) {checkBox.setChecked(false);list.get(position).setIscheck(false);Logs.w(list.get(position).ischeck() &#43; " 是否设置勾选68");} else {checkBox.setChecked(true);list.get(position).setIscheck(true);Logs.w(list.get(position).ischeck() &#43; " 是否设置勾选72");}//监听每个item&#xff0c;若所有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 scanResults) {list &#61; scanResults;}}
AllCheckListener
/*** Description: 对item导致maincheckbox改变做监听* AUTHOR: Champion Dragon* created at 2018/3/22**/public interface AllCheckListener {void onCheckedChanged(boolean b);
}
效果图&#xff1a;