Построитель не изменен в последующем тексте для текста редактирования во фрагменте - PullRequest
0 голосов
/ 14 января 2020

Как я могу изменить свой текст редактирования после изменения? Метод работает, но текст редактирования не меняется. Могу ли я использовать setview в пост-обменном? Alertdialog во фрагменте так сложно, и я использовал это приложение разбился

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

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Я решил с этим:

    @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);
         }
0 голосов
/ 14 января 2020

В вашем методе publi c void afterTextChanged(Editable s) внесите изменения в объект Editable, а не назначайте новый объект для ссылки s например,

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

Это происходит потому, что исходный текст в EditText происходит от объекта, на который ссылается s, если вы назначите новый объект для этой ссылки, это не повлияет на исходный объект, следовательно, это не повлияет на текст в представлении.

...