我正在创建一个具有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());
}
});
}
以上语句在我使用时无法识别更新的edittext: update_columns.put(的 ed.getTag()的toString()下,s.toString());
上面的粗体语句总是有最后添加的EditText标记值。我错了吗?
答案 0 :(得分:0)
那是因为ed
会在你的while循环的每次迭代中更新。在TextWatcher中保留对ed.getTag().toString()
的值的引用会更容易,并引用它:
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都只会更新相应的列。