Как показать разные сообщения для различной длины ввода в EditText? - PullRequest
0 голосов
/ 18 марта 2019

Я хочу показать пользователю другое сообщение для различной длины ввода, которое он делает. Но мой код не работает. Что с этим не так?

EditText boxID = findViewById(R.id.vcInput);
Button button = findViewById(R.id.refresh);
TextView tv = findViewById(R.id.message)

final int inputLength = boxID.getText().toString().length();


if(inputLength >= 10 && inputLength <= 11)
  {tv.setText("Refresh request sent");}

else if(inputLength<1)
       {tv.setText("VC number field looks empty");} //Only this one works at any input length

else if(inputLength>1 && inputLength<10)
       {tv.setText("VC number must be at least 10 digit");}

else {tv.setText("Wrong input");}

Screenshot of my code

Ответы [ 3 ]

2 голосов
/ 18 марта 2019

То, что вы ищете, это, вероятно, TextWatcher

Пример использования:

boxID.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

        // TODO Auto-generated method stub
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        // TODO Auto-generated method stub
    }

    @Override
    public void afterTextChanged(Editable s) {

        int inputLength = s.length();


        if(inputLength >= 10 && inputLength <= 11)
          {tv.setText("Refresh request sent");}

        else if(inputLength<1)
          {tv.setText("VC number field looks empty");} 

        else if(inputLength>1 && inputLength<10)
          {tv.setText("VC number must be at least 10 digit");}

        else {tv.setText("Wrong input");}
    });
0 голосов
/ 18 марта 2019

Хорошо, у вас есть 3 условия (фактически 4)
inputLength >= 10 && inputLength <= 11
inputLength<1
inputLength>1 && inputLength<10
и else

Вы можете сделать это так:

if(inputLength >= 10 && inputLength <= 11)
  {tv.setText("Refresh request sent");}

if(inputLength<1)
       {tv.setText("VC number field looks empty");}

if(inputLength>1 && inputLength<10)
       {tv.setText("VC number must be at least 10 digit");}

if(inputLength > 11)
   {tv.setText("Wrong input");}

У меня были похожие проблемы с else if оператором. Я должен был восстановить дерево условий.

0 голосов
/ 18 марта 2019

Ваш inputLength был final.Первоначально inputLength был пустым и был сохранен в последнем поле inputLength со значением 0. Именно поэтому срабатывает только 2-е условие.

Значение inputLength было установлено до того, как onClick было запущено.

Решением является либо использование TextWatcher, либо более простое - просто переместить inputLength внутрь onClick, таким образом вы можете получить новое значение для inputLength при каждом триггере onClick:

    @Override
    public void onClick(View v) {
        final int inputLength = boxID.getText().toString().length();


       new Handler().postDelayed(new Runnable() { 
          @Override
          public void run() {
             if(inputLength >= 10 && inputLength <= 11)
                tv.setText("Refresh request sent");

             else if(inputLength<1)
                tv.setText("VC number field looks empty"); //Only this one works at any input length

             else if(inputLength>1 && inputLength<10)
                tv.setText("VC number must be at least 10 digit");

             else tv.setText("Wrong input");
          }
       })
   }
...