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 に答える