我想使用三个EditTexts,当用户更改一个EditText的内容时,这些更改应该反映在其他两个EditTexts.This中,所有EditTexts的行为应该是相同的。假设e1、e2、e3是三个Edittexts的id,当用户在e1中输入内容时,e2和e3必须被赋予来自e1的值。如果更改了e2,则必须将e2中的值分配给e1和e3。
发布于 2018-06-04 02:15:31
你可以使用这个定制的TextWatcher
示例:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SyncTextWatcher syncTextWatcher=new SyncTextWatcher();
syncTextWatcher.addEditText(
(EditText)findViewById(R.id.editText1),
(EditText)findViewById(R.id.editText2),
(EditText)findViewById(R.id.editText3),
(EditText)findViewById(R.id.editText4),
(EditText)findViewById(R.id.editText5)
);
}
这是SyncTextWatcher类
class SyncTextWatcher implements TextWatcher {
private List<EditText> editTexts = new ArrayList<>();
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
for (int i = 0; i < editTexts.size(); i++) {
EditText editText = editTexts.get(i);
if(editText.getText()==s)continue;
editText.removeTextChangedListener(this);
editText.setText(s.toString());
editText.addTextChangedListener(this);
}
}
public void addEditText(EditText... editTexts) {
for (int i = 0; i < editTexts.length; i++){
this.editTexts.add(editTexts[i]);
editTexts[i].addTextChangedListener(this);
}
}
public void removeEditText(EditText editText) {
boolean b = editTexts.remove(editText);
if (b) editText.removeTextChangedListener(this);
}
}
发布于 2018-06-03 21:11:32
我想它应该是这样的。
在更改e2和e3上的文本后设置e1上的文本的示例
e1.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
e2.setText(...what you want to do);
e3.setText(...what you want to do);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
});
https://stackoverflow.com/questions/50666664
复制相似问题