I have 20 items displayed in my ListView
. All the data is coming from mysql database. I have a Button, in my onClickListener
it will set the Text of that button. But when it does, it also set the Text of other items in the list. And when I scroll through the items in the list it randomly changes the text of other button. Some are reverted to the original text, and some was set to the Text that I put, and keeps on changing as I keep on scrolling. I tried taking the setText
in and out of the if statement
but still no luck.
Here is my Adapter
public class myOrderListAdapter extends ArrayAdapter<myOrder> {
public class ViewHolder{
TextView tableNum;
TextView itemName;
TextView itemQuantity;
Button btnStatus;
}
public myOrderListAdapter(Context context, ArrayList<myOrder> orderList) {
super(context, 0,orderList);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final myOrder orderList = getItem(position);
final ViewHolder viewHolder;
if(convertView == null){
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(getContext()).inflate(R.layout.order_list_layout,parent,false);
viewHolder.tableNum = (TextView)convertView.findViewById(R.id.OLtableNum);
viewHolder.itemName = (TextView)convertView.findViewById(R.id.OLitemName);
viewHolder.itemQuantity = (TextView)convertView.findViewById(R.id.OLitemQuantity);
viewHolder.btnStatus = (Button)convertView.findViewById(R.id.statusButton);
convertView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder)convertView.getTag();
}
viewHolder.tableNum.setText("Order for Table "+orderList.getTable_id());
viewHolder.itemName.setText(orderList.getItem_name());
viewHolder.itemQuantity.setText("QTY: " + orderList.getQuantity());
if(orderList.getStatus_id() == 1){
viewHolder.btnStatus.setText("Preparing");
viewHolder.btnStatus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
viewHolder.btnStatus.setText("Served");
}
});
notifyDataSetChanged();
}
return convertView;
}
}