Android Listview项目单击会影响多个项目

时间:2018-07-20 20:28:56

标签: android listview dialog position

我有一个产品清单。我可以为每个项目设置订单数量。为此,我使用了对话框和项目位置。 但是,当我为单个项目放置数量时,会影响多个项目。

Problem Video 我用过波纹管代码

sListview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        final Dialog dialog = new Dialog(OrderEntryActivity.this);
        dialog.setContentView(R.layout.order_qty_collect);


        TextView tvpid= (TextView) view.findViewById(R.id.pId);
        TextView tVpid= (TextView) dialog.findViewById(R.id.pcode);
        PRODUCTID=tvpid.getText().toString();
        tVpid.setText(PRODUCTID);

        final TextView parentitemid= (TextView) dialog.findViewById(R.id.parentitemid);
        parentitemid.setText( String.valueOf(position));

        TextView tvpname= (TextView) view.findViewById(R.id.pName);
        TextView tVpname= (TextView) dialog.findViewById(R.id.pName);
        tVpname.setText(tvpname.getText());

        TextView tvpprice= (TextView) view.findViewById(R.id.pPrice);
        TextView tVpprice= (TextView) dialog.findViewById(R.id.pPrice);
        TextView pQty= (TextView) dialog.findViewById(R.id.poQty);
        tVpprice.setText(tvpprice.getText());
        dialog.setCancelable(false);
        dialog.show();

        Button submit = (Button) dialog.findViewById(R.id.btn_qtySubmit);

        submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TextView PIid= (TextView) dialog.findViewById(R.id.parentitemid);
                int ItemPogision =Integer.parseInt(PIid.getText().toString());

                EditText qTy= (EditText) dialog.findViewById(R.id.qtyId);
                String qtY=qTy.getText().toString();
                if(qtY.equals("")){
                    Toast.makeText(OrderEntryActivity.this,"Order Quantity Blank. Please fillup.",Toast.LENGTH_SHORT).show();
                }else{
                    Integer Qty= Integer.parseInt(qtY);
                    salesDB.deleteTmpOrderByPID(PRODUCTID);
                  Boolean x=salesDB.TmpOrderInsert(CUSTID,PRODUCTID,Qty);
                  if(x==true){
                      TextView pqty= (TextView) sListview.getChildAt(ItemPogision).findViewById(R.id.poQty);
                      pqty.setText(qtY);
                      sListview.getChildAt(ItemPogision).setBackgroundColor(Color.GREEN);

                      Toast.makeText(OrderEntryActivity.this,"Added to Cart",Toast.LENGTH_SHORT).show();
                      dialog.dismiss();
                      Count++;
                      count.setText(Count.toString());
                  }else{
                      Toast.makeText(OrderEntryActivity.this,"Fail to add into Cart",Toast.LENGTH_SHORT).show();
                  }

                }
            }
        });

        Button close = (Button) dialog.findViewById(R.id.btn_cancel);
        close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.cancel();
            }
        });
    }
});

在视频中您可以看到,我已经下了两个产品的订单数量,但是它影响了项目列表中的多个产品。

2 个答案:

答案 0 :(得分:0)

我完全听不懂你在说什么 但, 如果要设置ClickListener或在ListView的特定行或该行中的特定项目中执行任何操作,则应在ListAdapter中设置侦听器,这样就可以正常工作。

答案 1 :(得分:0)

我会使用getItemAtPosition()

sListview.setClickable(true);
sListview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

  @Override
  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    Object o = lv.getItemAtPosition(position);
    /* write you handling code*/  
  }
});

您的代码可能会使用其他控件,因为它们都具有相同的ID,我没有过多研究您的代码,但看来这是您的问题。