Select 全部在 Cardview

Select all in Cardview

我想要 select 所有行。

CustomAdapter2

public class CustomAdapter2 extends RecyclerView.Adapter<CustomAdapter2.EmpDataViewHolder> {

    public ArrayList<Employee> emp_arr, filterList;
    private Context context;
    public ArrayList<Employee> getEmpList;

    public CustomAdapter2(Context context, ArrayList<Employee> emp_arr) {
        this.emp_arr= emp_arr;
        this.context = context;
        this.filterList = new ArrayList<Employee>();
        this.filterList.addAll(this.emp_arr);
    }

    @Override
    public CustomAdapter2.EmpDataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(context).inflate(R.layout.customcard1, parent, false);
        EmpDataViewHolder edvh = new EmpDataViewHolder(v);
        return edvh;
    }

    @Override
    public void onBindViewHolder(final CustomAdapter2.EmpDataViewHolder holder, final int position) {

        Employee employee = new Employee();
        employee = filterList.get(position);
        int pos = position;

        final String emp_ID = "" + employee.getEmpid();
        holder.txt_id.setText(emp_ID);

        holder.txt_fname.setText(employee.getEmpfname());
        holder.txt_lname.setText(employee.getEmplname());

        holder.cb1.setChecked(employee.isSelected());
        holder.cb1.setTag(employee);
        holder.cb1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CheckBox cb = (CheckBox) v;
                Employee contact = (Employee) cb.getTag();

                contact.setSelected(cb.isChecked());
                emp_arr.get(position).setSelected(cb.isChecked());

                Toast.makeText(
                        v.getContext(),
                        "Clicked on Checkbox: " + cb.getText() + " is "
                                + cb.isChecked(), Toast.LENGTH_LONG).show();
            }
        });

        holder.cv.setTag(R.string.KeyForCV, position);
        holder.cv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CardView cv = (CardView) v;
                Employee emp = filterList.get(position);
            }
        });}

    @Override
    public int getItemCount() {
        return filterList.size();
    }

    static class EmpDataViewHolder extends RecyclerView.ViewHolder{

        CardView cv;
        TextView txt_id;
        TextView txt_fname;
        TextView txt_lname;
        CheckBox cb1;
        CheckBox cb;
        Boolean checked;


        public EmpDataViewHolder(View itemView) {
            super(itemView);


            cv = (CardView) itemView.findViewById(R.id.cv1);
            txt_id = (TextView) itemView.findViewById(R.id.id);
            txt_fname = (TextView) itemView.findViewById(R.id.fname);
            txt_lname = (TextView) itemView.findViewById(R.id.lname);
            cb1 = (CheckBox) itemView.findViewById(R.id.c2);

        }
    }
    private ArrayList<Employee> getStudentist() {
        return emp_arr;
    }}

CardView2

public class Cardview2 extends AppCompatActivity {

    CustomAdapter2 cu;
    CheckBox selectall,c2;

    private ArrayList<Employee> Emplist;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cardview2);


        RecyclerView rv = (RecyclerView) findViewById(R.id.rv1);
        rv.setHasFixedSize(true);

        final ArrayList<Employee> arr = InitializeData();

        final LinearLayoutManager llm = new LinearLayoutManager(Cardview2.this);
        rv.setLayoutManager(llm);
        rv.setHasFixedSize(true);

        cu = new CustomAdapter2(Cardview2.this, arr);
        rv.setAdapter(cu);

        registerForContextMenu(rv);


        selectall= (CheckBox) findViewById(R.id.c1);
        Emplist=new ArrayList<Employee>();

        for (int i = 1; i <=Emplist.size(); i++) {
            Employee st = new Employee();

            Emplist.add(st);
        }

        selectall.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                String data = "";
                ArrayList<Employee> stList = ((CustomAdapter2) cu)
                        .emp_arr;

                CheckBox cb;
                cb = (CheckBox) findViewById(R.id.c2);
    try { for (int i = 0; i < stList.size(); i++) {
        Employee employee = stList.get(i);
        if (employee.isSelected() == false) {
            cb.setChecked(selectall.isChecked());
        }
    }}catch (Exception e){
    e.printStackTrace();}[enter image description here][1]}

        });


    }
        private ArrayList<Employee> InitializeData () {
            ArrayList<Employee> arr_emp = new ArrayList<>();



            DAL dal = new DAL(Cardview2.this);
            dal.OpenDB();
            arr_emp = dal.AllSelectQryForTabEmpData1();
            dal.CloseDB();
            return arr_emp;}}

我希望在启用 Selectall 复选框时选中所有行。

尝试

cb.setChecked(isChecked)

而不是:

Employee employee = stList.get(i);
    if (employee.isSelected() == false) {
        cb.setChecked(selectall.isChecked());
    }
CheckBox cb;
for (int i = 0; i < rv.getChildCount(); i++) {
    cb = (CheckBox)rv.getChildAt(i).findViewById(R.id.c2);
    cb.setChecked(selectall.isChecked());
}

所以这就是我必须做的,现在得到了答案。