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*/
}
});