【发布时间】:2016-10-18 06:37:04
【问题描述】:
我有一个带有自定义 Row.xml 的列表视图。
2 文本视图 2个按钮
按钮功能是加减数量。 App 开始运行时,每行默认数量为 1。
点击加号时,数量+1
点击减号按钮时,数量-1
从屏幕截图 1 到屏幕截图 2 工作正常。我为第 1 行(data1)单击加号按钮 4 次。
但是,如果我点击 2nd Row(data2) Plus 按钮,数量没有加 1,而是直接跳到 6。这个错误也适用于减号
这意味着 Quantity 在每一行中不是唯一的。相反,它将两行 Quantity 累积在一起。
MainActivity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ArrayList arrayList=new ArrayList<String>();
arrayList.add("data1");
arrayList.add("data2");
ListView listView = (ListView) findViewById(R.id.listview);
final MyCustomAdapter myCustomAdapter=new MyCustomAdapter(this,arrayList);
listView.setAdapter(myCustomAdapter);
MyCustomAdapter.java
public class MyCustomAdapter extends BaseAdapter {
int ab=1;
int p=1;
Context ctx;
LayoutInflater inflater=null;
ArrayList arrayList;
public MyCustomAdapter(Context ctx,ArrayList arrayList){
this.ctx=ctx;
this.arrayList=arrayList;
}
@Override
public int getCount() {
return arrayList.size();
}
@Override
public Object getItem(int i) {
return arrayList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View row=view;
if(row==null){
inflater=(LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row=inflater.inflate(R.layout.row,null);
}
TextView product_name=(TextView)row.findViewById(R.id.text);
product_name.setText(arrayList.get(i).toString());
final TextView quantity=(TextView)row.findViewById(R.id.quantity);
Button minus=(Button) row.findViewById(R.id.minus);
Button plus=(Button) row.findViewById(R.id.plus);
minus.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(ab!=1){ // if quantity =1, cannot minus anymore
ab=ab-1;
}
p=ab;
quantity.setText(Integer.toString(ab));
}
});
plus.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
ab=ab+1;
p=ab;
quantity.setText(Integer.toString(ab));
}
});
return row;
}
}
有人知道如何修复这个错误吗?
【问题讨论】:
-
在按钮点击监听器上进行调试并检查分配给 int ab 的值
-
@DaminiMehra 我为 ab 放了 2 个日志,值与屏幕上显示的值相同。
-
我认为您在创建数据列表时有问题。数组中只有一个字段[String],那么如何分别拥有不同项目的数量?您可以看看我在这里发布的答案:stackoverflow.com/questions/39926388/…,我认为这会有所帮助。