Partha Chattaraj
Partha Chattaraj

Reputation: 105

How to get check box state from recyclerview items on pressing Done button

` public class CardAdapter extends RecyclerView.Adapter {

    String game_name[];
    private static final int TYPE_HEADER = 0;
    private static final int TYPE_ITEM = 1;
    //private RecyclerViewClickListener itemListener;

    card_header header;

    public CardAdapter(card_header header, String[] game_name) {
        this.game_name = game_name;
        this.header = header;
    }
    @Override
    public int getItemCount() {
        return game_name.length + 1;
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == TYPE_HEADER) {
            View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_header, parent, false);
            return new ViewHolderHeader(itemView);
        } else if (viewType == TYPE_ITEM) {
            View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view, parent, false);
            return new ViewHolderItem(itemView);
        }
        throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof ViewHolderHeader) {
            ViewHolderHeader VHheader = (ViewHolderHeader) holder;
            VHheader.tv_heading_slot_time.setText(getResources().getString(R.string.slot_time));
        } else if (holder instanceof ViewHolderItem) {
            ViewHolderItem VHitem = (ViewHolderItem) holder;
            VHitem.tv_time_slot.setText(game_name[position - 1]);
        }
    }

    @Override
    public int getItemViewType(int position) {
        if (isPositionHeader(position))
            return TYPE_HEADER;
        return TYPE_ITEM;
    }

    private boolean isPositionHeader(int position) {
        return position == 0;
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    public class ViewHolderHeader extends RecyclerView.ViewHolder {
        TextView tv_heading_game_name, tv_heading_1, tv_heading_2, tv_heading_3,
                tv_heading_4, tv_heading_5, tv_heading_6;

        public ViewHolderHeader(View itemView) {
            super(itemView);
            tv_heading_slot_time = (TextView) itemView.findViewById(R.id.tv_heading_slot_time);
            tv_heading_1 = (TextView) itemView.findViewById(R.id.tv_heading_1);
            tv_heading_2 = (TextView) itemView.findViewById(R.id.tv_heading_2);
            tv_heading_3 = (TextView) itemView.findViewById(R.id.tv_heading_3);
            tv_heading_4 = (TextView) itemView.findViewById(R.id.tv_heading_4);
            tv_heading_5 = (TextView) itemView.findViewById(R.id.tv_heading_5);
            tv_heading_6 = (TextView) itemView.findViewById(R.id.tv_heading_6);

            switch (numberOfCheckBoxes){

                case 1:
                    tv_heading_2.setVisibility(View.GONE);
                    tv_heading_3.setVisibility(View.GONE);
                    tv_heading_4.setVisibility(View.GONE);
                    tv_heading_5.setVisibility(View.GONE);
                    tv_heading_6.setVisibility(View.GONE);
                    break;
                case 2:
                    tv_heading_2.setVisibility(View.VISIBLE);
                    tv_heading_3.setVisibility(View.GONE);
                    tv_heading_4.setVisibility(View.GONE);
                    tv_heading_5.setVisibility(View.GONE);
                    tv_heading_6.setVisibility(View.GONE);
                    break;
                case 3:
                    tv_heading_2.setVisibility(View.VISIBLE);
                    tv_heading_3.setVisibility(View.VISIBLE);
                    tv_heading_4.setVisibility(View.GONE);
                    tv_heading_5.setVisibility(View.GONE);
                    tv_heading_6.setVisibility(View.GONE);
                    break;
                case 4:
                    tv_heading_2.setVisibility(View.VISIBLE);
                    tv_heading_3.setVisibility(View.VISIBLE);
                    tv_heading_4.setVisibility(View.VISIBLE);
                    tv_heading_5.setVisibility(View.GONE);
                    tv_heading_6.setVisibility(View.GONE);
                    break;
                case 5:
                    tv_heading_2.setVisibility(View.VISIBLE);
                    tv_heading_3.setVisibility(View.VISIBLE);
                    tv_heading_4.setVisibility(View.VISIBLE);
                    tv_heading_5.setVisibility(View.VISIBLE);
                    tv_heading_6.setVisibility(View.GONE);
                    break;
                case 6:
                    tv_heading_2.setVisibility(View.VISIBLE);
                    tv_heading_3.setVisibility(View.VISIBLE);
                    tv_heading_4.setVisibility(View.VISIBLE);
                    tv_heading_5.setVisibility(View.VISIBLE);
                    tv_heading_6.setVisibility(View.VISIBLE);
                    break;
            }
        }
    }

    public class ViewHolderItem extends RecyclerView.ViewHolder implements View.OnClickListener {
        TableLayout tl;
        TextView tv_time_slot;
        CheckBox cb_1, cb_2, cb_3, cb_4, cb_5, cb_6;

        public ViewHolderItem(View itemView) {
            super(itemView);
            cb_1 = (CheckBox) itemView.findViewById(R.id.cb_1);
            cb_2 = (CheckBox) itemView.findViewById(R.id.cb_2);
            cb_3 = (CheckBox) itemView.findViewById(R.id.cb_3);
            cb_4 = (CheckBox) itemView.findViewById(R.id.cb_4);
            cb_5 = (CheckBox) itemView.findViewById(R.id.cb_5);
            cb_6 = (CheckBox) itemView.findViewById(R.id.cb_6);
            tv_time_slot = (TextView) itemView.findViewById(R.id.tv_time_slot);
            tl = (TableLayout) itemView.findViewById(R.id.tl);

            switch (numberOfCheckBoxes){

                case 1:
                    tl.setColumnCollapsed(1,false);
                    tl.setColumnCollapsed(2,true);
                    tl.setColumnCollapsed(3,true);
                    tl.setColumnCollapsed(4,true);
                    tl.setColumnCollapsed(5,true);
                    tl.setColumnCollapsed(6,true);
                    break;
                case 2:
                    tl.setColumnCollapsed(1,false);
                    tl.setColumnCollapsed(2,false);
                    tl.setColumnCollapsed(3,true);
                    tl.setColumnCollapsed(4,true);
                    tl.setColumnCollapsed(5,true);
                    tl.setColumnCollapsed(6,true);
                    break;
                case 3:
                    tl.setColumnCollapsed(1,false);
                    tl.setColumnCollapsed(2,false);
                    tl.setColumnCollapsed(3,false);
                    tl.setColumnCollapsed(4,true);
                    tl.setColumnCollapsed(5,true);
                    tl.setColumnCollapsed(6,true);
                    break;
                case 4:
                    tl.setColumnCollapsed(1,false);
                    tl.setColumnCollapsed(2,false);
                    tl.setColumnCollapsed(3,false);
                    tl.setColumnCollapsed(4,false);
                    tl.setColumnCollapsed(5,true);
                    tl.setColumnCollapsed(6,true);
                    break;
                case 5:
                    tl.setColumnCollapsed(1,false);
                    tl.setColumnCollapsed(2,false);
                    tl.setColumnCollapsed(3,false);
                    tl.setColumnCollapsed(4,false);
                    tl.setColumnCollapsed(5,false);
                    tl.setColumnCollapsed(6,true);
                    break;
                case 6:
                    tl.setColumnCollapsed(1,false);
                    tl.setColumnCollapsed(2,false);
                    tl.setColumnCollapsed(3,false);
                    tl.setColumnCollapsed(4,false);
                    tl.setColumnCollapsed(5,false);
                    tl.setColumnCollapsed(6,false);
                    break;
            }

            cb_1.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {


                    switch (getLayoutPosition()) {

                        case 1:
                            if (cb_1.isChecked()) {

                            }
                            else {

                            }
                            break;
                        case 2:
                            if (cb_1.isChecked()) {

                            }
                            else {

                            }
                            break;
                        case 3:
                            if (cb_1.isChecked()) {

                            }
                            else {

                            }
                            break;
                        case 4:
                            if (cb_1.isChecked()) {

                            }
                            else {

                            }
                            break;
                        case 5:
                            if (cb_1.isChecked()) {

                            }
                            else {

                            }
                            break;
                        case 6:
                            if (cb_1.isChecked()) {

                            }
                            else {

                            }
                            break;
                    }
                }
            });
            cb_2.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    Toast.makeText(getApplicationContext(), "cb2 " + getLayoutPosition(),
                            Toast.LENGTH_SHORT).show();
                }
            });
            cb_3.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    Toast.makeText(getApplicationContext(), "cb3 " + getLayoutPosition(),
                            Toast.LENGTH_SHORT).show();
                }
            });
            cb_4.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    Toast.makeText(getApplicationContext(), "cb4 " + getLayoutPosition(),
                            Toast.LENGTH_SHORT).show();
                }
            });
            cb_5.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    Toast.makeText(getApplicationContext(), "cb5 " + getLayoutPosition(),
                            Toast.LENGTH_SHORT).show();
                }
            });
            cb_6.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    Toast.makeText(getApplicationContext(), "cb6 " + getLayoutPosition(),
                            Toast.LENGTH_SHORT).show();
                }
            });
        }

    }

}

`I have a recyclerview which contains text item fetched from a list and few check boxes in each item. i want the state of checked check boxes when i press Done button. i want to identify each checkbox. Can someone help?

checkboxes in column has ids CB1,CB2 and so on..

Here is the screenshot enter image description here

Upvotes: 1

Views: 1403

Answers (2)

ccpizza
ccpizza

Reputation: 31706

The proper 'offically-endorsed' way to handle selection state on a recyclerview would be using the androidx.recyclerview.selection library.

A step-by-step walkthrough on how to use the library: https://proandroiddev.com/a-guide-to-recyclerview-selection-3ed9f2381504

Upvotes: 1

SlashG
SlashG

Reputation: 680

A summary of the above links shared by Malav Shah, have a flag representing each CheckBox in your model Class. These flag won't be reset when your Views are recycled. In your onBindViewHolder method, where you set your View's properties, set each CheckBox's value from its corresponding flag. Hope this helps.

Upvotes: 1

Related Questions