java - 根据用户输入更改按钮行为

标签 java android converters android-edittext android-button

我正在用 Android 编写一个简单的应用。

我遇到过这个问题:我有两个 EditText 和一个 Button。一个 EditText 的值必须是另一个 EditText 的倍数。

当用户在第一个 EditText 中插入一个值然后按下按钮时,另一个 EditText 应该显示根据用户输入计算的值。 这在其他经文中也应该是可能的。

就像一个简单的单位转换器。当我在 EditText1 中插入 value1 并按下转换时,应用程序必须在 EditText2 中显示转换后的值,但如果我在 EditText2 中插入 value2 并按下转换按钮,应用程序必须显示EditText1 中的转换值。 我的问题是:我如何识别哪个 EditText 中有最后的用户输入?

public void convert(View view) {
    EditText textInEuro = (EditText) findViewById(R.id.euroNumber);
    EditText textInDollar = (EditText) findViewById(R.id.dollarNumber);
    if (toDollar) {
        String valueInEuro = textInEuro.getText().toString();
        float numberInEuro = Float.parseFloat(valueInEuro);
        // Here the conversione between the two currents
        float convertedToDollar = unit * numberInEuro;
        // set the relative value in dollars
        textInDollar.setText(Float.toString(convertedToDollar));
    }

    if (toEuro) {
        String valueInDollar = textInDollar.getText().toString();
        float numberInDollar = Float.parseFloat(valueInDollar);
        //Here the conversione between the two currents
        float convertedToEuro = numberInDollar / unit;
        //set the relative value in dollars
        textInEuro.setText(Float.toString(convertedToEuro));
    }
}

这是写的代码。我考虑过使用 OnClickListener..但这不是一个好主意..

最佳答案

您可以将 TextWatcher 添加到您的两个 EditText 中,以便了解最后更新的是哪个。

public class MainActivity extends Activity {

EditText dollar;
EditText euro;

private static final int EURO = 0;
private static final int DOLLAR = 1;

private int lastUpdated = DOLLAR;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    dollar = findViewById(R.id.dollar);
    euro = findViewById(R.id.euro);

    dollar.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            lastUpdated = DOLLAR;

        }

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

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

    euro.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            lastUpdated = EURO;

        }

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

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

}

public void convert(View view) {
    switch (lastUpdated) {
    case EURO:
        //Do work for euro to dollar
        break;
    case DOLLAR:
        //Do work for dollar to euro
        break;
    default:
        break;
    }
}
}

关于java - 根据用户输入更改按钮行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12512889/

相关文章:

java - 从 Arraylist 创建字符串数组

C# NewtonSoft Single Object 或 Array JsonConverter 不工作,没有错误

java - 使用 Spring 的 SimpleNamingContextBuilder 的应用程序如何知道在其目录中搜索资源?

java - XMLUNIT 忽略 xmlns?

android - 如何使用 Facebook 的 Unity SDK 获取用户的头像?

java - 在 Robolectric 上运行第一个测试时出现问题

java - 如何在 HTTP post 请求的消息正文中附加 XML 文件?

c# - 每次与转换器绑定(bind)时,按钮单击时的背景颜色变亮

java - @PathVariable 的全局通用 PropertyEditorSupport -> 域对象

java GUI简单登录后端mysql