最近在做一个项目的一个功能就是对售后人员进行增加和删除,今天我先讲删除的功能:
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); }
效果图: