首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在安卓系统中同步两个或多个EditTexts?

如何在安卓系统中同步两个或多个EditTexts?
EN

Stack Overflow用户
提问于 2018-06-03 20:57:27
回答 2查看 413关注 0票数 0

我想使用三个EditTexts,当用户更改一个EditText的内容时,这些更改应该反映在其他两个EditTexts.This中,所有EditTexts的行为应该是相同的。假设e1、e2、e3是三个Edittexts的id,当用户在e1中输入内容时,e2和e3必须被赋予来自e1的值。如果更改了e2,则必须将e2中的值分配给e1和e3。

EN

回答 2

Stack Overflow用户

发布于 2018-06-04 02:15:31

你可以使用这个定制的TextWatcher

示例:

代码语言:javascript
复制
    @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类

代码语言:javascript
复制
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);
    }
}
票数 2
EN

Stack Overflow用户

发布于 2018-06-03 21:11:32

我想它应该是这样的。

在更改e2和e3上的文本后设置e1上的文本的示例

代码语言:javascript
复制
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
    } 
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50666664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档