购物车项目计数增量/减量&添加到购物车

时间:2016-08-02 13:19:32

标签: android listview

大家好我使用自定义列表视图从服务器获取数据并在listview中显示..我能够获取数据并在listview中显示,但我不知道在listitem中实现按钮的click事件。有两个按钮来递增和递减数量。我的clicklistener正在工作,但它没有以正确的方式工作。当我点击增加或减少产品时,它应该被添加到购物车。请帮我纠正这个问题。我搜索了太多帖子,但无法理解......

这是我的适配器类代码:

SenderViewController

result

这是我的ProductActivity Code

公共类ProductsActivity扩展了ActionBarActivity {

messageData

}

3 个答案:

答案 0 :(得分:0)

这一行...

private static int _counter = 0;

因此,当您单击列表中的任何项时,您只会跟踪适配器中所有项目的一个数字,而不是每个个人项目。

我建议你定义一些面向对象的设计来获得CartProduct类。这将允许您以清晰的方式跟踪列表中的项目及其详细信息和数量,而不是将Hashmap跟踪到ListView中。

有了Product类,我建议您研究如何实现ArrayAdapter<Product>

答案 1 :(得分:0)

您可以使用接口覆盖方法在您的activity类中实现一个接口,并将该接口作为参数传递给适配器构造函数。让我们创建一个名为increment的接口。

public interface Increment {
  void addCount(boolean ADD_FLAG);
}

在您的活动中实施此功能。

Class CartActivity implements Increment {

@Override
public void addCount(boolean ADD_FLAG) {
if (ADD_FLAG) {
//If true increment..
} else{
//If false decrement..
}
}

使用您的其他参数将接口作为参数传递给适配器构造函数,如下所示。

Increment increment = null;

public ProductsAdapter(Context context, ArrayList<HashMap<String, String>> arraylist, Increment increment) {
  this.increment = increment;
}

最后在你的点击监听器中。

//Add this line to increment..
increment.addCount(true);

//Add this line to decrement..
    increment.addCount(false);

希望这会有所帮助:)

答案 2 :(得分:0)

创建一个界面,如;

interface QuantityChangeListener {
    void onQuantityChanged(HashMap<String, String> map);
}

在您创建上述适配器的位置实现此接口。

ProductsAdapter adapter = new ProductAdapter(this, "your list",
    new QuantityChangeListener() {
         @Override
         public void onQuantityChanged(HashMap<String, String> map) {
              // add item to cart
         }
     }
);

将此接口传递给ProductsAdapter类的构造函数。

private QuantityChangeListener listener;
public ProductsAdapter(Context context, ArrayList<HashMap<String, String>> arraylist, QuantityChangeListener listener){
    this.listener = listener;
    // do other stuff
}

txtplus.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.d("src", "Increasing value...");
        _counter++;
        _stringVal = Integer.toString(_counter);
        value.setText(_stringVal);
        listener.onQuantityChanged(map);
    }
});