大家好我使用自定义列表视图从服务器获取数据并在listview中显示..我能够获取数据并在listview中显示,但我不知道在listitem中实现按钮的click事件。有两个按钮来递增和递减数量。我的clicklistener正在工作,但它没有以正确的方式工作。当我点击增加或减少产品时,它应该被添加到购物车。请帮我纠正这个问题。我搜索了太多帖子,但无法理解......
这是我的适配器类代码:
SenderViewController
这是我的ProductActivity Code
公共类ProductsActivity扩展了ActionBarActivity {
messageData
}
答案 0 :(得分:0)
这一行...
private static int _counter = 0;
因此,当您单击列表中的任何项时,您只会跟踪适配器中所有项目的一个数字,而不是每个个人项目。
我建议你定义一些面向对象的设计来获得Cart
和Product
类。这将允许您以清晰的方式跟踪列表中的项目及其详细信息和数量,而不是将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);
}
});