我正在用 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/