我的ListView
中显示了20个项目。所有数据都来自mysql数据库。我有一个按钮,在我onClickListener
中它将设置该按钮的文本。但是当它发生时,它还设置列表中其他项的文本。当我滚动列表中的项目时,它会随机更改其他按钮的文本。有些被恢复为原始文本,有些被设置为我放置的文本,并且随着我继续滚动而不断变化。我尝试将setText
放入if statement
进出,但仍然没有运气。
这是我的适配器
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;
}
}
答案 0 :(得分:0)
ListView回收ListView项目,如果你有10个项目,当前列表显示滚动它时的5个项目ll将第1个项目作为第6个项目。添加日志以检查是否在if&amp ;;中打印视图的ID在其他情况下,您需要保持基于循环视图更新文本的逻辑。