0

我正在创建一个具有 TextView 和对应 Edittext 的动态布局。创建它没有问题。我正在使用这个:

while(it.hasNext())
{
tv = dynamicUiComponents.myTextView(context, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT), 1000+i, key);
ed = dynamicUiComponents.myRowEditText(context, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT),50+i,value);
ed.setTag(key);

ed.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after)
{
}
@Override
public void afterTextChanged(Editable s) {
update_columns.put(ed.getTag().toString(),s.toString());
}
});
}

当我使用此语句时,上述语句无法识别更新的编辑文本: update_columns.put( ed.getTag().toString() ,s.toString());

上面的粗体语句始终具有最后添加的 EditText 标记值。我在哪里错了吗?

4

1 回答 1

0

那是因为ed你的 while 循环的每次迭代都会更新。ed.getTag().toString()保留对 TextWatcher 中的值的引用并引用它会更容易:

ed.addTextChangedListener(new TextWatcher() {
private String columnId = key; //Add this

@Override
public void onTextChanged(CharSequence s, int start, int before, int count){ }

@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {    }

@Override
public void afterTextChanged(Editable s) {
  update_columns.put(this.columnId, s.toString());
}
});

这样每个 EditText 的 TextWatcher 将只更新相应的列。

于 2012-11-17T14:24:42.713 回答