My rows contain a button that has its own click listener set in my adapter's
When I click on a button it sets the button text "yes' and again click than change it to "No" properly, my problem is as I scroll through the list its setting it for different rows as well. I assume theirs an issue somewhere with views recycling. and when i scroll list then changed text button needs double click to again change button text. but i want it on single click. what should i have to do?
Here's my code:
public class ListAdapter extends ArrayAdapter<Model> {
customButtonListener customListner;
public interface customButtonListener {
public void onButtonClickListner(int position, Model model);
}
public void setCustomButtonListner(customButtonListener listener) {
this.customListner = listener;
}
private Context context;
private ArrayList<Model> data = new ArrayList<Model>();
public ListAdapter(Context context, ArrayList<Model> dataItem) {
super(context, R.layout.row, dataItem);
this.data = dataItem;
this.context = context;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(context);
convertView = inflater.inflate(R.layout.row, null);
viewHolder = new ViewHolder();
viewHolder.text = (TextView) convertView
.findViewById(R.id.childTextView);
viewHolder.text1 = (TextView) convertView
.findViewById(R.id.childTextView1);
viewHolder.button = (Button) convertView
.findViewById(R.id.childButton);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
final Model model = getItem(position);
viewHolder.text.setText(model.getNames());
viewHolder.button.setTag(1);
viewHolder.button.setText(model.getYes());
viewHolder.button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
int status = (Integer) v.getTag();
if (status == 1) {
model.setYes("Yes");
viewHolder.button.setText("Yes");
v.setTag(0);
} else {
model.setYes("No");
viewHolder.button.setText("No");
v.setTag(1);
}
}
});
return convertView;
}
public class ViewHolder {
ViewHolder viewHolder;
TextView text, text1;
Button button;
}
}