如何从动态生成的edittext获取更新数据并将其放入hashmap中

时间:2012-11-17 12:37:03

标签: android

我正在创建一个具有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标记值。我错了吗?

1 个答案:

答案 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都只会更新相应的列。