0

好的,在尝试解决这个问题 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 项,并还原更改。

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

4

1 回答 1

2

看这个例子,它可能对你有帮助,

http://www.mysamplecode.com/2012/12/android-attach-textwatcher-to-multiple-edittext.html

于 2013-10-16T08:43:06.940 回答