Search code examples
androidandroid-edittextandroid-alertdialogbuildertextwatcher

Builder not changed in aftertextchanged for edittext in fragment


How can I change my edittext after changed? Method works but edittext not change. Can I use setview in aftertextchanged? Alertdialog in fragment so it is difficult and I used this app crashed

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();

It's change the text field. Formatter:

 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;
}

Solution

  • I solved with this:

        @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);
             }