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

时间:2015-05-15 09:10:55

标签: android listview interface listener baseadapter

我为适配器类中的Button点击创建了自定义侦听器界面,我按照教程:{{3 }}

适配器:

        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;
    }

implemented Listener Activity就像这样:

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 时,它会以list item价格的进行更改,但不会影响subTotal金额< / p>

2 个答案:

答案 0 :(得分:2)

你应该以某种方式改变你的逻辑,它只计算适配器中的subTotal,然后只将最终值传递给接口,然后将其设置为textview

所以你的代码应该是这样的:

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);

答案 1 :(得分:0)

  

如何在适配器类中更改

时更新Activity中的值

更新btnQtyIncrease按钮上的活动数据。使用接口创建自定义事件侦听器,当在Quantity中进行任何更改时,将在Activity中触发。

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

How to create our own Listener interface in android?