Android listview项目点击影响多个项目

Android listview项目点击影响多个项目,android,listview,dialog,position,Android,Listview,Dialog,Position,我有一份产品清单。我可以为每个项目设置订单数量。为此,我使用了对话框和项目位置。 但当我为一个项目计算数量时,它会影响多个项目 我使用了下面的代码 sListview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long i

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

我使用了下面的代码

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();
            }
        });
    }
});
sListview.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
最终对话框=新建对话框(OrderEntryActivity.this);
对话框.setContentView(R.layout.order\u qty\u 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 tvprice=(TextView)view.findViewById(R.id.pPrice);
TextView tvprice=(TextView)dialog.findViewById(R.id.pPrice);
TextView pQty=(TextView)dialog.findViewById(R.id.poQty);
tvprice.setText(tvprice.getText());
对话框。可设置可取消(false);
dialog.show();
按钮提交=(按钮)dialog.findViewById(R.id.btn_qtySubmit);
submit.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
TextView PIid=(TextView)dialog.findViewById(R.id.parentitemid);
int ItemPogision=Integer.parseInt(PIid.getText().toString());
EditText数量=(EditText)dialog.findViewById(R.id.qtyId);
字符串数量=数量getText().toString();
如果(数量等于(“”){
Toast.makeText(OrderEntryActivity.this,“订单数量为空。请填写。”,Toast.LENGTH_SHORT.show();
}否则{
整数数量=整数.parseInt(数量);
salesDB.deleteTmpOrderByPID(PRODUCTID);
布尔x=salesDB.TmpOrderInsert(客户ID、产品ID、数量);
如果(x==true){
TextView pqty=(TextView)sListview.getChildAt(ItemPogision.findViewById(R.id.poQty);
质量设置文本(数量);
sListview.getChildAt(ItemPogision.setBackgroundColor(Color.GREEN);
Toast.makeText(OrderEntryActivity.this,“添加到购物车”,Toast.LENGTH_SHORT.show();
dialog.dismise();
计数++;
count.setText(count.toString());
}否则{
Toast.makeText(OrderEntryActivity.this,“无法添加到购物车”,Toast.LENGTH_SHORT.show();
}
}
}
});
按钮关闭=(按钮)对话框。findViewById(R.id.btn\u取消);
close.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
dialog.cancel();
}
});
}
});

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

我无法完全理解您的意思 但是
如果要设置ClickListeners或在ListView的特定行或该行中的特定项中执行任何操作,则应在ListAdapter中设置侦听器,这样就可以了。

我将使用getItemAtPosition()

sListview.setClickable(true);
sListview.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
对象o=lv.getItemAtPosition(位置);
/*编写处理代码*/
}
});

您的代码可能会拾取其他控件,因为它们都具有相同的id,我没有深入研究您的代码,但这似乎是您的问题。

请忘记上述代码。下载源代码**下载源代码**运行它,点击一个项目并滚动列表。好的,忘记一切。如果我写
sListview.setOnItemClickListener(新的AdapterView.OnItemClickListener(){@Override public void onItemClick(AdapterView父对象,视图视图,int位置,长id){View.setBackgroundColor(Color.GREEN);})将发生什么??如果我没有错,特定项目的背景颜色将被改变。但这并没有发生。它改变了多个项目的背景应该只是被触动的视图,当你尝试它时,它改变了多个项目?尝试
sListView.getItemAtPosition(position)
就像我在回答中说的,或者
sListView.getChildAt(position)
我也尝试了你的代码,但结果是一样的。当我触摸一个项目时,它会用其他随机项目更改其背景颜色。如果您有时间,请尝试使用适配器,然后在进一步挖掘之后,listview将回收ID。因此,大致如下:
lv.setAdapter(newbaseadapter(){public View getView(int-position,View-convertView,ViewGroup-parent){//Do-Stuff}}
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*/  
  }
});