Как управлять EditText? - PullRequest
0 голосов
/ 18 марта 2020

Я хочу контролировать EditText, который принимает только значения int. Пользователь вводит числа, затем я добавлю строку (легкая часть). Но я хочу изменить это динамически, поскольку пользователь вводит числа. Как я могу добиться этого?

Я могу сделать следующее:
пользователь пишет 61, EditText вывод: 61 мин.
пользователь пишет 1314, затем EditText вывод: 13 мин 14 се c.

Вот проблема:
Если пользователь пишет 7699, ожидаемый EditText вывод будет: 76 мин 59 сек c.

Я думаю, мне нужен контроллер, такой как ArrayAdapter getView() метод. Если пользователь пишет 1361, то я должен сказать, чтобы на телефоне не печаталось «13 мин 61 сек c», просто выведите «13 мин 59 сек c» в EditText. Но я не знаю как.

Решение Я попытался: Как остановить редактирование текста, чтобы добавить текст, когда в него введен текст требуемого формата?

Любая помощь будет оценена.

Ответы [ 2 ]

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

Чтобы разрешить только числовые значения, вы можете использовать android:inputType="number" в вашем файле EditText XML

Для отслеживания значения, записанного в EditText, вы можете прослушать изменения EditText, используя addTextChangedListener метод и TextWatcher интерфейс

 Timer timer = new Timer();
    final long DELAY = 2000; // in ms
    field1 = (EditText)findViewById(R.id.field1);

    field1.addTextChangedListener(new TextWatcher() {

        public void afterTextChanged(final Editable s) {
            // Do whatever you want with the updated value
            timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    // TODO: do what you need here
                    // you will probably need to use
                    // runOnUiThread(Runnable action) for some specific
                    // actions


                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            String minsString = "";
                            String secsString = "";
                            switch (s.length()) {
                                case 1:
                                    if (Integer.parseInt(String.valueOf(s)) == 0 || Integer.parseInt(String.valueOf(s)) == 1) {
                                        field1.setText(s + " min");
                                    } else {
                                        field1.setText(s + " mins");
                                    }
                                    break;
                                case 2:
                                    field1.setText(s + " mins");
                                    break;
                                case 3:
                                    minsString = s.toString().substring(0, 2);
                                    secsString = s.toString().substring(2);
                                    if (Integer.parseInt(secsString) > 59) {
                                        secsString = "59";
                                    }
                                    field1.setText(minsString + " mins " + secsString + " secs");
                                    break;
                                case 4:
                                    minsString = s.toString().substring(0, 2);
                                    secsString = s.toString().substring(2);
                                    if (Integer.parseInt(secsString) > 59) {
                                        secsString = "59";
                                    }
                                    field1.setText(minsString + " mins " + secsString + " secs");
                                    break;
                                default:
                                    break;
                            }
                        }
                    });

                }

            }, DELAY);

        }

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

        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (timer != null)
                timer.cancel();
        }
    });

обращение к таймеру решение для предотвращения обновления экземпляра текста редактирования

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

Есть функция из DateUtils, которую вы можете использовать, вам просто нужно дать ей Long.

/**
     * Formats an elapsed time in the form "MM:SS" or "H:MM:SS"
     * for display on the call-in-progress screen.
     * @param elapsedSeconds the elapsed time in seconds.
     */
    public static String formatElapsedTime(long elapsedSeconds) {
        return formatElapsedTime(null, elapsedSeconds);
    }

, чтобы использовать ее, это действительно легко, DateUtils.formatElapsedTime(time), и она будет распечатать в формате String your time в формате MM:SS

...