0

I am using a Recyclerview to show some question and answer. On click on arrow button doing some stuff and on click on tvTitle doing same stuff.

Is there any way that I should not repeat the same code on two click listener. I can't use the method outside the onBindViewHolder because I am using viewholder item which can't handle outside onBindViewHolder.

Please help.

public void onBindViewHolder(@NonNull Adapter.ViewHolder viewHolder, int position) {

Model model = filteredList.get(position);

viewHolder.tvTitle.setText(model.getQuestion());
viewHolder.tvDescription.setText(model.getAnswer());

viewHolder.btnArrow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Do some stuff
                if (viewHolder.tvDescription.getVisibility() == View.GONE) {
                    viewHolder.tvDescription.setVisibility(View.VISIBLE);
                    viewHolder.btnArrow.setBackgroundResource(R.drawable.ic_arrow_up1);
                } else {
                    viewHolder.tvDescription.setVisibility(View.GONE);
                    viewHolder.btnArrow.setBackgroundResource(R.drawable.ic_arrow_down1);
                }
            }
        });

viewHolder.tvTitle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Do some stuff
                if (viewHolder.tvDescription.getVisibility() == View.GONE) {
                    viewHolder.tvDescription.setVisibility(View.VISIBLE);
                    viewHolder.btnArrow.setBackgroundResource(R.drawable.ic_arrow_up1);
                } else {
                    viewHolder.tvDescription.setVisibility(View.GONE);
                    viewHolder.btnArrow.setBackgroundResource(R.drawable.ic_arrow_down1);
                }
            }
        });
    }

1 Answers1

0

I achieved my desired answer by using a method and passing viewholder in it:

viewHolder.btnArrow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                doAction(viewHolder);
            }
        });

        viewHolder.tvTitle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                doAction(viewHolder);
            }
        });

Method:

private void doAction(final ViewHolder viewHolder) {

        if (viewHolder.tvDescription.getVisibility() == View.GONE) {
            viewHolder.tvDescription.setVisibility(View.VISIBLE);

            viewHolder.btnArrow.setBackgroundResource(R.drawable.ic_arrow_up1);
        } else {
            viewHolder.tvDescription.setVisibility(View.GONE);
            viewHolder.btnArrow.setBackgroundResource(R.drawable.ic_arrow_down1);
        }
    }