好的,在尝试解决这个问题 2 小时后,我希望你能帮助我。
我有一个 ListAdapter,它为每个项目显示一个简单的布局。布局由项目名称、+ 和 - 按钮以及包含该项目数量的输入组成。
每个项目的数量都是有限的,所以我在EditText中添加了一个TextWatcher,所以数量改变后,它会检查数据库,输入的数量是否有效(大于或等于0,小于或等于最大数量) )。
问题是,每当我单击 + 或 - 按钮时,afterTextChanged 都会触发每个项目,而不仅仅是我刚刚编辑的项目,而且它的行为很奇怪。
我的自定义 ListAdapter 中的代码
public View getView(int pos, View view, ViewGroup viewGroup) {
...
((TextView) view.findViewById(R.id.mat_qty)).setText(m.quantity+"");
((TextView) view.findViewById(R.id.mat_qty)).addTextChangedListener(new MyTextWatcher(m));
MyTextWatcher 中的代码(m 是我的 Material 对象,它在 MyTextWatcher 的构造函数中传递,它有一个名称、EAN 等,所以我可以识别它)
public void afterTextChanged(Editable s) {
String v = s.toString();
Log.i("TextWatcher", "Hey "+m.name+": "+v);
}
但是,每当我编辑任何值时(假设我在列表中添加了 3 个项目,并且我编辑其中一个),事件都会为每个项目触发,但最奇怪的是 - Editable s 中的值对于每个项目都是相同的.. .这意味着我的极限检查是无用的,因为它提供了绝对不正确的值......
澄清示例:
项目 1 [-] 1 [+](最多 2 个)
项目 2 [-] 2 [+](最多 4 个)
当我将 1 添加到项目 2 时,afterTextChanged 会为每个值为 3 的项目触发,因此正确的行为就是放手,因为项目 2 的最大值为 4。相反,它将“3”与最大值 2 进行比较第 1 项,并还原更改。
有人可以解释我做错了什么吗?我很绝望...