Android可复用的选择页面

窗口代码

/**
 * 根据上一个页面传过来的isMultipleEnable判断是否可以多选
 * 1.单选页面选中一个条目直接结束并回传
 * 2.多选页面选中之后需要提交
 * 3.提交数据之后需要刷新列表
 */
public class UserSelectActivity extends AppCompatActivity implements View.OnClickListener {

    private static final String TAG = "UserSelectActivity";

    @BindView(R.id.tv_title_middle)
    TextView title;
    @BindView(R.id.title_left)
    ImageView back;
    @BindView(R.id.normal_user_listview)
    ListView mListView;
    @BindView(R.id.edit_tv)
    TextView edit;
    @BindView(R.id.filter_tv)
    TextView filter;

    private Context mContext;
    private boolean isMultipleEnable;
    private UserSelectAdapter mAdapter;
    private List<ClsNormalUser> mClsNormalUserList;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_normal_user_list);
        //初始化ButterKnife
        ButterKnife.bind(this);

        initView();
        initData();
        initListener();
    }

    private void initData() {
        mContext = this;

        //通过源页面传过来的值来生成对应的视图,默认是单选
        isMultipleEnable = getIntent().getBooleanExtra("isMultipleEnable", false);

        //初始化数据源
        mClsNormalUserList = new ArrayList<>();
        mAdapter = new UserSelectAdapter(mClsNormalUserList, mContext);
        mListView.setAdapter(mAdapter);

        getOfflineData(20);

        //多选页面要显示提交按钮和checkbox
        if (isMultipleEnable) {
            edit.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_send_black_24dp, 0, 0, 0);
            edit.setVisibility(View.VISIBLE);

            for (ClsNormalUser user : mClsNormalUserList) {
                user.setIsCheckBoxVisible(true);
            }
        }
    }

    //生成模拟数据
    private void getOfflineData(int num) {
        List<ClsNormalUser> clsNormalUserList = new ArrayList<>();
        for (int i = 0; i < num; i++) {
            ClsNormalUser clsNormalUser = new ClsNormalUser();
            clsNormalUser.setUserID("userID " + i);
            clsNormalUser.setWorkNumber("workNumber " + i);
            clsNormalUser.setUserType("userType " + i);
            clsNormalUser.setOrgName("orgName " + i);
            clsNormalUser.setCName("cName " + i);
            clsNormalUser.setSysUserName("sysUserName " + i);
            clsNormalUser.setOrgID("orgID " + i);
            clsNormalUser.setWorkPos("workPos " + i);
            clsNormalUserList.add(clsNormalUser);
        }
        //数据填充后要同时适配器刷新视图
        mClsNormalUserList.addAll(clsNormalUserList);
        mAdapter.notifyDataSetChanged();
    }

    private void initView() {
        title.setText("选择用户");
    }

    private void initListener() {
        edit.setOnClickListener(this);

        mListView.setOnItemClickListener((parent, view, position, id) -> {
            ClsNormalUser clsNormalUser = mClsNormalUserList.get(position);
            if (isMultipleEnable) {
                //多选状态下点击选中当前条目
                if (clsNormalUser.getIsCheckBoxVisible()) {
                    clsNormalUser.setIsChecked(!clsNormalUser.getIsChecked());
                    mAdapter.notifyDataSetChanged();
                }
            } else {
                //单选状态下点击结束当前页并回传值
                Intent intent = new Intent();
                //实体类要实现序列化接口Parcelable
                intent.putExtra("user", clsNormalUser);
                setResult(RESULT_OK, intent);
                finish();
            }
        });
    }


    @Override
    public void onClick(View v) {

        //点击提交按钮将选中的值回传并结束当前页
        if (v.getId() == R.id.edit_tv) {
            ArrayList<ClsNormalUser> normalUserList = new ArrayList<>();
            for (ClsNormalUser normalUser : mClsNormalUserList) {
                if (normalUser.getIsChecked()) {
                    normalUserList.add(normalUser);
                }
            }
            Intent intent = new Intent();
            //实体类要实现序列化接口Parcelable
            intent.putParcelableArrayListExtra("users", normalUserList);
            setResult(RESULT_OK, intent);
            finish();
        }
    }
}

适配器代码

public class UserSelectAdapter extends BaseAdapter {

    private List<ClsNormalUser> mList;
    private LayoutInflater mInflater;

    public UserSelectAdapter(List<ClsNormalUser> list, Context mContext) {
        mList = list;
        mInflater = LayoutInflater.from(mContext);
    }

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

    @Override
    public ClsNormalUser getItem(int position) {
        return mList.get(position);
    }

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

    @Override
    public View getView(final int position, View convertView, ViewGroup root) {
        ItemHolder holder;
        ClsNormalUser clsNormalUser = mList.get(position);

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.item_alluser_sys, null);
            holder = new ItemHolder();
            holder.id = convertView.findViewById(R.id.user_id);
            holder.name = convertView.findViewById(R.id.user_name);
            holder.org = convertView.findViewById(R.id.user_org);

            holder.checkBox = convertView.findViewById(R.id.user_checkbox);
            convertView.setTag(holder);
        } else {
            holder = (ItemHolder) convertView.getTag();
        }

        holder.id.setText(clsNormalUser.getUserID());
        holder.name.setText(clsNormalUser.getCName());
        holder.org.setText(clsNormalUser.getOrgName());

        //是否显示checkbox
        if (clsNormalUser.getIsCheckBoxVisible()) {
            holder.checkBox.setVisibility(View.VISIBLE);
        } else {
            holder.checkBox.setVisibility(View.GONE);
        }

        //条目是否选中
        if (clsNormalUser.getIsChecked()) {
            holder.checkBox.setImageResource(R.drawable.ic_check_box_black_24dp);
        } else {
            holder.checkBox.setImageResource(R.drawable.ic_check_box_outline_blank_black_24dp);
        }

        return convertView;
    }

    class ItemHolder {
        TextView id;
        TextView name;
        TextView org;
        ImageView checkBox;
    }
}

效果如图
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

free5156

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值