Как использовать обработчик событий для выполнения действия после того, как пользователь выбрал «Готово» на программной клавиатуре - PullRequest
0 голосов
/ 14 апреля 2019

Отказ от ответственности: я пытался найти в Google / найти другие решения, но не смог найти каких-либо конкретных решений для моей проблемы.

У меня есть поле editText (FahrenheitEditText), которое принимает числовое значение в градусах Фаренгейта и должно преобразовать его в градусы Цельсия после того, как пользователь нажмет клавишу «Готово».

Я пытался написать метод вне метода onEditorAction для его преобразования. Я также попытался реализовать преобразование в операторе if. Также я попытался использовать IME_ACTION_GO, но это не сработало.

package com.murach.tempconverter;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;

public class TempConverterActivity extends Activity {

    private float celsius;
    EditText editText;
    TextView displayCelsius;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_temp_converter);

        displayCelsius = (TextView) findViewById(R.id.celciusTextView);
        editText = (EditText) findViewById(R.id.fahrenheitEditText);

        editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
                if(actionId == EditorInfo.IME_ACTION_GO)
                {
                    float fahrenheitInput = Float.parseFloat(editText.getText().toString());
                    celsius = convertFahrenheitToCelcius(fahrenheitInput);
                    displayCelsius.setText(" " + celsius);
                }

                return false;
            }
        });

    }

    public float convertFahrenheitToCelcius(float fahrenheit) {
        celsius = (fahrenheit-32)*(5/9);
        return celsius;
    }


}

Я пытался ввести число, такое как 100, и ожидал, что появится 37,778, но вместо этого появился 0.0.

решено: операция 5/9 сводилась к нулю, потому что я не объявлял их как плавающие значения. поэтому я заменил 5/9 на 5f / 9f, и это сработало

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...