片段中的编辑文本在 aftertextchanged 中未更改生成器

Builder not changed in aftertextchanged for edittext in fragment

更改后如何更改编辑文本?方法有效,但 edittext 没有改变。我可以在 aftertextchanged 中使用 setview 吗?片段中的警报对话框所以很难,我用这个应用程序崩溃了

AlertDialog.Builder builder = new AlertDialog.Builder(this.getContext());
        builder.setTitle("Lütfen tutar girin");

        final EditText input = new EditText(this.getContext());

        input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
        builder.setView(input);
        input.addTextChangedListener(new TextWatcher() {
                                         @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) {
                                             try {
                                                 if(s.length()>=4) {
                                                     s = new SpannableStringBuilder(Formatter(s.toString()));
                                                 }
                                             }catch (NumberFormatException e){

                                             }
                                         }
                                     });


                builder.setPositiveButton("OK", (dialog, which) -> {
                    String pin = input.getText().toString();
                    if (!pin.isEmpty()) {
                        getFragmentManager().beginTransaction()
                                .replace(R.id.container, new CardFragment((int) (Float.parseFloat(pin) * 100), operation))
                                .addToBackStack(null).commit();
                    } else {
                        showMessage("Lütfen Tutar Giriniz");
                    }

                });

        builder.show();

它正在更改文本字段。格式化程序:

 public  String Formatter(String rut) {
    String mString;
    if(rut.length()==4){
        mString = rut.substring(0,4)+",";
    }else if(rut.length()==5){
        mString = rut.substring(0,4)+","+rut.substring(3,4);
    }else
        mString = rut.substring(0,4)+","+rut.substring(3,5);
    return mString;
}

在您的 public void afterTextChanged(Editable s) 方法中更改 Editable 对象而不是将新对象分配给引用 s 例如

@Override
public void afterTextChanged(Editable s) {
    if (s.length() < 4)
        s.append("abc");
}

发生这种情况是因为 EditText 上的原始文本来自 s 引用的对象,如果您将新对象分配给此引用,它不会影响原始对象,因此它不会' 影响视图中的文本。

我用这个解决了:

    @Override
    public void afterTextChanged(Editable s) {
        try {
             input.removeTextChangedListener(this);
             if(s.length()>4){
             s = new SpannableStringBuilder( Formatter(s.toString()));
             input.setText(s);
          }
input.addTextChangedListener(this);
         } catch (Exception ex) {
                ex.printStackTrace();
                input.addTextChangedListener(this);
         }