ListAdapter中的多个TextWatcher

时间:2013-10-16 08:40:57

标签: android

好的,所以在尝试解决这个问题2小时后,我希望你能帮助我。

我有一个ListAdapter,它为每个项目显示一个简单的布局。 布局由项目名称,+和 - 按钮以及包含该项目数量的输入组成。

每个项目的数量都是有限的,所以我将一个TextWatcher添加到EditText中,所以在更改数量后,它会检查数据库,输入的数量是否有效(大于或等于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个项目添加到列表中,并且我编辑其中一个)时,事件会触发每个项目,但是什么是最奇怪的 - 可编辑的值对于每个值都相同item ...表示我的限制检查没用,因为它提供了绝对不正确的值......

澄清的例子:

第1项[ - ] 1 [+](最多2个)

第2项[ - ] 2 [+](最多4个)

当我在第2项中添加1时,afterTextChanged将为每个值为3的项触发,因此正确的行为就是让它继续,因为项2的最大值为4.而是将“3”与最大值进行比较第1项为2,并恢复更改。

有人可以解释一下我做错了什么吗? 我很绝望......

1 个答案:

答案 0 :(得分:2)