【问题标题】:Append text at beginning of edittext [duplicate]在edittext的开头附加文本[重复]
【发布时间】:2016-12-05 16:51:03
【问题描述】:

如何在用户开始输入时自动在edittext的开头添加文本。例如,我想在用户开始输入电话号码时自动附加国家代码。 我试过-

      mNumber.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
            mNumber.setText("+91"+editable.getText().toString());
            }
        });

但这不起作用,我一输入编辑文本,我的设备就会挂起。

【问题讨论】:

    标签: android android-edittext addtextchangedlistener


    【解决方案1】:

    您正在导致无限循环,因为您从afterTextChanged() 调用setText(),然后setText() 正在调用afterTextChanged() 等等。

    您可以将afterTextChanged() 更改为以下内容,

    public void afterTextChanged(Editable s) {
        if(!s.toString().startsWith("+91")){
            s.insert(0, "+91");
        }
    }
    

    这样你就不会一直打电话给setText(),而且检查也在那里,这样你就不会在每次用户在 EditText 中键入内容时添加“+91”。这种方法的一个缺点是,一旦“+91”被自动插入到输入的开头,您就不能通过退格删除它。

    【讨论】:

    • 我还需要添加-Selection.setSelection(mNumber.getText(), mNumber.getText().length()); 否则我会看到多个 +91 ..请解释它的作用以及为什么需要在这里?
    【解决方案2】:

    您的应用挂起,因为mNumber.setText("...") 一次又一次地触发您的 addTextChangedListener()...

    您可以通过检查是否已设置前缀并仅在未设置前缀时添加前缀来避免这种情况。

    public void afterTextChanged(Editable editable) {
        if (!mNumber.getText().startsWith("+91")) {
            mNumber.setText("+91"+mNumber.getText());
        }
    }
    

    【讨论】:

    • 我还需要添加-Selection.setSelection(mNumber.getText(), mNumber.getText().length()); 否则我会看到多个 +91..请解释它的作用以及为什么它需要在这里?
    【解决方案3】:

    对@wanpanman 的回答进行改进

    ET.addTextChangedListener(new TextWatcher() {
                int count;
                @Override
                public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                }
                @Override
                public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                    count=i2;
                }
                @Override
                public void afterTextChanged(Editable s) {
                    if(!s.toString().startsWith("+91 ") && count!=0){
                        s.insert(0, "+91 ");
                    }
                }
            });
    

    count 变量确保在删除第一个 +91 实例时不会添加两次 +91。

    count=0时,表示退格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 2019-01-23
      • 2016-10-01
      • 2013-07-28
      相关资源
      最近更新 更多