Android-列表视图中的相邻按钮会自动单击

rit*_*ITW 12 android listview

我正在开发一个填充购物车的模块.我使用ListView并扩展BaseAdapter来填充购物车项目.对于每个项目ListView,我嵌入了两个按钮(inc和dec)来增加和减少购物车中的商品数量.

ListView 已正确更新,但快速单击/点击时的递增/递减按钮显示突然行为.

每当我快速点击任何inc或dec按钮时,将ListView自动点击当前项目旁边的项目的相应inc或dec按钮(以及当前项目btn).

换句话说,每当我快速点击第i个项目的ListViewinc btn时,ListView会自动点击第i + 1个项目的inc btn(以及第i个项目的inc btn).

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_item_cart, parent, false);
        holder = new ViewHolder();
        holder.baseItem = (TextView) convertView.findViewById(R.id.qnt_tv);
        holder.qntInc = (TextView) convertView.findViewById(R.id.inc_btn);
        holder.qntDec = (TextView) convertView.findViewById(R.id.dec_btn);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    final CartModel cm = mCart.get(position);
    holder.baseItem.setText(cm.getmTitle());
    holder.qntSel.setText(String.valueOf(cm.getmQnt()));
    holder.qntInc.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (qntSpinnerCb != null)
                qntSpinnerCb.changeQuantityOfSelectedItemInCart(cm.getmIid(), INCREASE_QNT);
        }
    });
    holder.qntDec.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (qntSpinnerCb != null) {
                qntSpinnerCb.changeQuantityOfSelectedItemInCart(cm.getmIid(), DECREASE_QNT);
            }
        }
    });

    return convertView;
}
Run Code Online (Sandbox Code Playgroud)

回调接口

public interface CartQntSpinnerListenerCallBack {
    void changeQuantityOfSelectedItemInCart(String iId, char changeType);
}
Run Code Online (Sandbox Code Playgroud)

试过调试,无法弄清楚这种奇怪的行为.

Jai*_*oni 9

你没有选择正确的CartModel内部onClick,如果你想在里面得到正确的对象,onclick那么你必须将位置标记为按钮

holder.qntInc.setTag(position);
Run Code Online (Sandbox Code Playgroud)

在onClick:

@Override
public void onClick(View view) {
    if (qntSpinnerCb != null) {
        CartModel cm= mCart.get((Integer)view.getTag);
        qntSpinnerCb.changeQuantityOfSelectedItemInCart(cm.getmIid(), INCREASE_QNT);
    }
}
Run Code Online (Sandbox Code Playgroud)

遵循相同的qntDec.


Dev*_*aja -1

代码中有问题。

if (convertView == null) {
    convertView = mInflater.inflate(R.layout.list_item_cart, parent, false);
    holder = new ViewHolder();
    holder.baseItem = (TextView) convertView.findViewById(R.id.qnt_tv);
    holder.qntInc = (TextView) convertView.findViewById(R.id.inc_btn);
    holder.qntDec = (TextView) convertView.findViewById(R.id.dec_btn);

    // This should be added in the code
    holder.qntSel = (TextView) convertView.findViewById(R.id.sec_txt);

    convertView.setTag(holder);
} else {
    holder = (ViewHolder) convertView.getTag();
}
Run Code Online (Sandbox Code Playgroud)