android - 如何在 android 中同步两个或多个 EditText?
问题描述
我想使用三个 EditText,当用户更改一个 EditText 的内容时,更改应该反映在其他两个 EditText 中。这种行为应该与所有 EditText 相同。假设 e1,e2,e3 是三个 Edittexts 的 id,当用户在 e1 中输入内容时,必须为 e2 和 e3 分配 e1 中的值。如果 e2 被更改,则必须为 e1 和 e3 分配来自 e2 的值。
解决方案
您可以使用这个定制的 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);
}
}
推荐阅读
- node.js - 套接字无法在 POST 内部发出
- java - 如何在java(android)中创建子对象
- c# - 为什么我无法使用从 ASP.Net 代码执行的 power shell 命令登录到 Azure?
- angular - 通过调用休息服务使用 Angular 5 上传文档
- javascript - 如何处理除法运算符中的溢出
- sql-server - 如何在 SQL Server 2012 中的普通存储过程中找出存储过程名称
- mongodb - MongoDB查询以使用公式更新集合中文档的每个字段
- spring-mvc - 仅在登录后创建 Spring Mvc 会话
- c++ - arduino 中函数和打印函数值的问题
- java - 模型无法转换为 ModelRealmProxyInterface