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);
}
}
});
}
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);
}
}