'How to handle same code on two button Click Event
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);
}
}
});
}
Solution 1:[1]
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);
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Gaurav Dureja |
