Android如何设置一个多选列表

文案开始,说明一下,本文主要是针对多选列表做的一个演示demo,具体使用需要自己去构思。

  1. 大多数由于复用引起的错位问题(列表),给出一个方案去解决一下,希望能够避免出现这样的错误。虽然很简单,但是确实是经常会去犯的一个错误
    如图:、
    在这里插入图片描述
    上面就是一个由于列表复用引起的错位问题。
  2. 下面展示两个正常的列表
    在这里插入图片描述
    在这里插入图片描述
  3. 对于这种列表复用出现的错位,一般可以在实体类设置一个变量去记录每个Item的选中状态。这样就可以避免错位问题。
    核心代码如下:
public class ListBean {
    private String title;
    private boolean btnStatus = false; // 关键代码,false代表未选中,true 选中

    public ListBean(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public boolean isBtnStatus() {
        return btnStatus;
    }

    public void setBtnStatus(boolean btnStatus) {
        this.btnStatus = btnStatus;
    }
}
public class ListDemoAdapter extends RecyclerView.Adapter<ListDemoAdapter.ListViewHolder> {

    public List<ListBean> dataList;// 数据源
    public Context context;


    public ListDemoAdapter(Context context, List<ListBean> dataList) {
        this.context = context;

        this.dataList = dataList;
    }

    @NonNull
    @Override
    public ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.item_list_error, null);
        return new ListViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final ListViewHolder holder, final int position) {
        holder.tvTitle.setText(dataList.get(position).getTitle());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 把选中状态存到数据源类
                ListBean data = dataList.get(position);
                // 取反状态值,赋值
                data.setBtnStatus(!data.isBtnStatus());
                // 刷新当前item
                notifyItemChanged(position);
            }
        });
        if (dataList.get(position).isBtnStatus()) {
            holder.ivChoose.setImageResource(R.mipmap.ic_choose);
        } else {
            holder.ivChoose.setImageResource(R.mipmap.ic_un_choose);

        }
    }

    @Override
    public int getItemCount() {
        return (dataList == null) ? 0 : dataList.size();
    }

    public class ListViewHolder extends RecyclerView.ViewHolder {
        public TextView tvTitle;
        public ImageView ivChoose;

        public ListViewHolder(@NonNull View itemView) {
            super(itemView);
            tvTitle = itemView.findViewById(R.id.tvTitleError);
            ivChoose = itemView.findViewById(R.id.ivTitleError);
        }
    }

}

github项目

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读