在 ListView 项目中单击按钮的自定义侦听器

Custom Listener on Button click in ListView Item

我已经为 Button 创建了一个 自定义侦听器界面 单击 适配器 class,我遵循了这个教程http://www.c-sharpcorner.com/UploadFile/9e8439/create-custom-listener-on-button-in-listitem-listview-in-a/

适配器:

        holder.btnQtyIncrease.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                 if (customListner != null) {  
                        customListner.onButtonClickListner(position);  
                 }  

                cart = cartArrayList.get(position);
                holder.textViewQuantity.setTag(cart);

                if(cart.getQuantity() == 9) {
                    Toast.makeText(context, "Already reached", Toast.LENGTH_LONG).show();
                    return ;
                }
                else 
                {                                                       
                    cart.setQuantity(cart.getQuantity() + 1);
                    holder.textViewQuantity.setText(String.valueOf(cart.getQuantity()));

                    totalPrice = cart.getQuantity() * cart.getPrice();

                    CartArrayList.cartArraylist.get(position).setTotal(totalPrice);
                    holder.textViewTotal.setText(cart.getTotal());
                }

            }
        });

        .....       
        return convertView;
    }

我在 Activity 中有 implemented Listener 是这样的:

public class CartActivity extends Activity implements customButtonListener {    
    ......

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("CartActivity-onCreate", "onCreate");

        setContentView(R.layout.activity_cart);     

        ......              

    }   


    @Override
    public void onResume()
    {
        super.onResume();   
        Log.d("CartActivity-onResume", "onResume");             
    }

    @Override
    public void onButtonClickListner(int position) {

        totalPrice = CartArrayList.cartArraylist.get(position).getQuantity() * CartArrayList.cartArraylist.get(position).getPrice();   
        CartArrayList.cartArraylist.get(position).setTotal(totalPrice);

        subTotal = subTotal + totalPrice;
    }

}

正如你在 for 循环中看到的那样 我是每个 列表项的 settinggetting total,然后计算 ArrayList 项的 subTotal...

但是每当我点击 btnQtyIncrease 时,它都会改变 totallist item 价格,但这不会影响在 subTotal 数量

How to update value in Activity when do change in Adapter class

点击 btnQtyIncrease 按钮更新 Activity 中的数据。使用界面创建自定义事件侦听器,当数量发生任何变化时,该界面将在 Activity 中触发。

请参阅以下创建自定义侦听器的示例:

How to create our own Listener interface in android?

你应该以某种方式改变你的逻辑,它只在适配器中计算小计,然后将最终值传递给界面,界面将简单地在文本视图中设置它

因此您的代码应如下所示:

holder.btnQtyIncrease.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            cart = cartArrayList.get(position);
            holder.textViewQuantity.setTag(cart);

            if(cart.getQuantity() == 9) {
                Toast.makeText(context, "Already reached", Toast.LENGTH_LONG).show();
                return ;
            }
            else 
            {                                                       
                cart.setQuantity(cart.getQuantity() + 1);
                holder.textViewQuantity.setText(String.valueOf(cart.getQuantity()));

                totalPrice = cart.getQuantity() * cart.getPrice();

                CartArrayList.cartArraylist.get(position).setTotal(totalPrice);
                holder.textViewTotal.setText(cart.getTotal());
            }

        }
        // calculate total here
         if (customListner != null) {  
                customListner.onButtonClickListner(getTotalValue());  
          }  

    });

在适配器中定义一个方法 getTotalValue,它将遍历数组并找到 subTotal 值。

然后在textView中简单设置即可

@Override
public void onButtonClickListner(float subTotal ) {
        txtView.setText(String.valueOf(subTotal));
}

相应地,将接口签名更改为:

public void onButtonClickListner(float total);