Android关于不确定recycleview+checkbox的选择事件处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kururunga/article/details/81976099

如图,列表中的字符串是从服务器获取的,数量也可能随时改变,需要做成如图的样式,并且选择权限完进行提交修改
这里写图片描述
下面是返回的数据;

{
"state": 1,
-"data": [
-{
"id": 1,
"permission": "开桌",
"shopid": 306
},
-{
"id": 2,
"permission": "买单",
"shopid": 306
},
-{
"id": 3,
"permission": "帮人下单",
"shopid": 306
},
-{
"id": 4,
"permission": "帮人买单",
"shopid": 306
},
-{
"id": 5,
"permission": "折扣",
"shopid": 306
},
-{
"id": 6,
"permission": "新增产品",
"shopid": 306
},
-{
"id": 7,
"permission": "删除产品",
"shopid": 306
},
-{
"id": 8,
"permission": "修改产品",
"shopid": 306
},
-{
"id": 9,
"permission": "转台及合并",
"shopid": 306
},
-{
"id": 10,
"permission": "订单修改",
"shopid": 306
},
-{
"id": 11,
"permission": "账单修改",
"shopid": 306
},
-{
"id": 12,
"permission": "基础信息设置",
"shopid": 306
}
]
}

和服务器约定好的是要提交权限是一个string,用,分隔,比如:”1,2,12”.
首先思路是这样,
1.用一个recycleview,里面的item一个是textview另一个是checkbox,checkbox的button状态设置成这个图片选择器
2.在adapter内部设置给外面调用的监听,当选泽和选择取消的时候进行判断,选中就用StringBuilder.append这个id,选择取消就删除Stringbuilder中指定位置的id号和它后面的逗号,最后选择完成进行提交的时候删除最后一个位置的逗号.

代码:
1.adapter:


public class AccountPermissionDetailRvAdapter extends BaseQuickAdapter<PermissionBean.DataBean,BaseViewHolder>{

    public AccountPermissionDetailRvAdapter(int layoutResId, @Nullable List<PermissionBean.DataBean> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, PermissionBean.DataBean item) {
        helper.setText(R.id.tv_permission,item.getPermission());
        //helper.setImageDrawable(R.id.iv_switch,mContext.getDrawable(R.drawable.iv_select_switch_button));
        CheckBox mCbSwitch = helper.getView(R.id.iv_switch);
        mCbSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                buttonCheckChangeListener.onCheckChanged(isChecked,item.getId());
            }
        });

    }

    public OnSwitchButtonCheckChangeListener buttonCheckChangeListener;

    public void setOnCheckBoxListener(OnSwitchButtonCheckChangeListener listener){
        this.buttonCheckChangeListener = listener;
    }


    public interface OnSwitchButtonCheckChangeListener{
        void onCheckChanged(boolean isChecked,int id);
    }
}

2.获取数据成功的处理:

     @Override
    public void onGetPermissionSuccess(PermissionBean bean) {
        List<PermissionBean.DataBean> data = bean.getData();
        mpermissionSize = data.size();
      //  setPermissionListMark();
        permissionDetailRvAdapter = new AccountPermissionDetailRvAdapter(R.layout.item_account_permission, data);
        permissionDetailRvAdapter.setOnCheckBoxListener(new AccountPermissionDetailRvAdapter.OnSwitchButtonCheckChangeListener() {
            @Override
            public void onCheckChanged(boolean isChecked,int id) {
                //showTip("ischeck:"+isChecked+" ;id:"+id);
                if (isChecked){
                    mStringBuilder.append(id+",");
                }else {//根据id来进行判断删除stringbuilder的哪个
//                    mStringBuilder.delete(id-1,id);
                    if (String.valueOf(id).length()<2){
                        int i = mStringBuilder.indexOf("" + id);
                        Log.d("stringbuilder","index:"+i);
                        mStringBuilder.deleteCharAt(i);
                        mStringBuilder.deleteCharAt(i);
                    }else {
                        int im = mStringBuilder.indexOf("" + id);
                        mStringBuilder.deleteCharAt(im);
                        mStringBuilder.deleteCharAt(im);
                        mStringBuilder.deleteCharAt(im);
                    }
                }
                showTip(mStringBuilder.toString());
            }
        });
        rvMyQuanxian.setLayoutManager(new LinearLayoutManager(this));
        rvMyQuanxian.setAdapter(permissionDetailRvAdapter);
    }

3.条目布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="60dp">
<TextView
    android:id="@+id/tv_permission"
    android:layout_width="match_parent"
    android:layout_weight="1"
    android:layout_height="match_parent"
    android:textColor="@color/black191"
    android:gravity="center_vertical"
    android:layout_marginLeft="24dp"
    android:text="点餐"
    />
    <CheckBox
        android:id="@+id/iv_switch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:gravity="center_vertical"
        android:layout_marginRight="19dp"
        android:layout_gravity="center_vertical"
        android:button="@drawable/iv_select_switch_button"/>
</LinearLayout>

小结:主要是stringbuilder的处理,indexof返回首先出现的这个匹配的字符串,如果没有就返回-1,
deleteCharAt删除指定位置的元素

猜你喜欢

转载自blog.csdn.net/kururunga/article/details/81976099