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

Java 根据用户输入更改按钮行为,java,android,converter,android-edittext,android-button,Java,Android,Converter,Android Edittext,Android Button,我正在用Android编写一个简单的应用程序 我遇到了这个问题:我有两个EditText和一个按钮。一个EditText的值必须是另一个EditText的倍数 当用户在第一个EditText中插入一个值,然后按下按钮时,另一个EditText应显示用户输入计算的值。 这在其他诗句中也是可能的 就像一个简单的单位转换器。当我在EditText1中插入值1并按convert时,应用程序必须在EditText2中显示转换后的值,但如果我在EditText2中插入值2并按convert按钮,应用程序必须

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

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

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

就像一个简单的单位转换器。当我在EditText1中插入值1并按convert时,应用程序必须在EditText2中显示转换后的值,但如果我在EditText2中插入值2并按convert按钮,应用程序必须在EditText1中显示转换后的值。 我的问题是:如何识别最后一次用户输入的编辑文本

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..但这不是一个好主意..

您可以在两个EditText中添加一个TextWatcher,以便知道最后更新的是哪一个

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;
    }
}
}

您可以在两个EditText中添加一个TextWatcher,以了解最后更新的是哪一个

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;
    }
}
}

我有一个不同的想法,你可以尝试以下方法来实现你想要的:

当用户首先进入“活动”时,允许他编辑任何编辑文本字段。一个正在填充,另一个将被禁用,直到他按下按钮 让他按一下按钮 一旦结果被填充并且他想要编辑其中一个edittext,其他edittext将自动为空 假设您有editText_1和editText_2,您的按钮是button_1。还可以使用名为convertBoolean的布尔变量,并将其设为默认值false

现在,


我有一个不同的想法,你可以尝试以下方法来实现你想要的:

当用户首先进入“活动”时,允许他编辑任何编辑文本字段。一个正在填充,另一个将被禁用,直到他按下按钮 让他按一下按钮 一旦结果被填充并且他想要编辑其中一个edittext,其他edittext将自动为空 假设您有editText_1和editText_2,您的按钮是button_1。还可以使用名为convertBoolean的布尔变量,并将其设为默认值false

现在,