我正在开发一个POS管理系统,用户可以从产品列表中选择一个项目,并在检查列表中添加所选值。我可以在点击产品列表后成功将新项目添加到检查列表,但无法更新检查列表项目的数量已添加之前。请参阅图片以获得清晰的演示,
从图像中可以看到每个产品项目都已添加为检查清单中的新项目,而不是更新数量。
我正在寻找一种解决方案,在点击产品列表中的项目后更新检查清单数量。
这是我的产品列表recyclerview的点击监听器,
recyclerProducts.addOnItemTouchListener(
new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
// TODO Handle item click
// productList is the arraylist used in product list
Products product = productList.get(position);
Contents c = new Contents();
c.setTitle(product.getName());
c.setQuantity(product.getQuantity());
orderList.add(c);
recyclerListAdapter.notifyDataSetChanged();
}
})
);
这是检查清单的适配器,
private List<Contents> contentsList;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title;
public TextView quantity;
public MyViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.txtTitle);
quantity = (TextView) view.findViewById(R.id.txtQuantity);
}
}
public RecyclerListAdapter(List<Contents> contentsList) {
this.contentsList = contentsList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_product, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Contents contents = contentsList.get(position);
holder.title.setText(contents.getTitle());
holder.quantity.setText("1");
}
@Override
public int getItemCount() {
return contentsList.size();
}
答案 0 :(得分:1)
应该做这样的事情
<%
String convert = request.getParameter("textarea1");
PrintWriter wr = response.getWriter();
File f =new File("file121.java");
if(!f.exists())
{
f.createNewFile();
wr.println("File is created\n");
}
FileWriter write = new FileWriter(f);
BufferedWriter bf = new BufferedWriter(write);
bf.write(convert);
bf.close();
wr.println("File writing done\n");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int result = compiler.run(null,null,null,"file121.java");
if(result==0){
wr.println("Compilation Successful");
}
else{
wr.println("Compilation Failed");
}
%>
使用散列图作为容器而不是列表将是更好的选择,因为我假设产品类型/名称是唯一的。
地图宣言。
for(Contents contents : orderList){
if (contents.getTitle().equals(product.getName())){
contents.setQuantity(product.getQuantity())
recyclerListAdapter.notifyDataSetChanged();
return;
}
//assume existing item was not found and add as before
Contents c = new Contents();
c.setTitle(product.getName());
c.setQuantity(product.getQuantity());
orderList.add(c);
recyclerListAdapter.notifyDataSetChanged();
return;
用法
Map<String,Contents> contentsMap = new HashMap<>();
请注意,哈希映射不需要迭代一堆值来更新数量。当您需要迭代值时,可以使用map.values()方法,如此。
Contents contents = contentsMap.get(product.getName());
if (contents != null){
contents.setQuantity(product.getQuantity());//update existing quantity
recyclerListAdapter.notifyDataSetChanged();
} else{
Contents newContents = new Contents();
newContents.setTitle(product.getName());
newContents.setQuantity(product.getQuantity());
contentsMap.put(product.getName(),newContents);
recyclerListAdapter.notifyDataSetChanged();
}
答案 1 :(得分:0)
我在想你想在这里做什么是在你的购物车(容纳你的物品的容器),你想知道物品ID,因为你已经知道原始列表中的物品ID,你可以在每次添加时检查一个新项目,如果它已经存在,如果已经存在,则更新它而不是添加新项目。
我假设您将数据(针对每个订单)存储在具有列的本地表中。因此,您只需查询该特定项目并更新它是否已存在。
只是我的两分钱,我希望它有所帮助!
祝你好运,编码愉快!