在 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 循环中看到的那样 我是每个 列表项的 setting
和 getting total
,然后计算 ArrayList 项的 subTotal...
但是每当我点击 btnQtyIncrease 时,它都会改变 total 的 list 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);
我已经为 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 循环中看到的那样 我是每个 列表项的 setting
和 getting total
,然后计算 ArrayList 项的 subTotal...
但是每当我点击 btnQtyIncrease 时,它都会改变 total 的 list 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);