如何在用户按下按钮时在编辑文本上显示值?
How to display values on edit text when the user presses a button?
我正在尝试制作一个计算器应用程序来显示用户在编辑文本屏幕上单击的所有内容,但是,当用户单击一个按钮时,编辑文本屏幕仍然是空白的。我已经放置了一些打印语句以查看会发生什么,这是我发现的:
updateEditText()
中的打印语句始终为空白,即使用户单击了一个按钮,但 getValuesPressed()
中的打印语句成功地打印出了单击按钮的位置。
我不明白我做错了什么。
这是我的资料:
void updateEditText(){
EditText et = (EditText) findViewById(R.id.editText);
System.out.println("THE VALUE PRESSED IS: " + getValuesPressed());
et.setText(getValuesPressed());//problem here
}
//return and concat the buttons that were clicked
String getValuesPressed(){
for(int i = 0; i < buttonList.length; i++){
final int j = i;
buttonList[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("THE BUTTON WAS PRESSED: " + buttonList[j].getText());
switch(j){
case 0://CLEAR
textOnScreen = "0";
break;
case 5://SQRT
solveEquation();
//CASE: IF IT IS NEG U CANT TAKE THE SQRT!!!!
textOnScreen = String.valueOf(Math.sqrt(Double.parseDouble(textOnScreen)));
break;
case 18: //NEGATIVE
if(textOnScreen.charAt(textOnScreen.length() - 1) != '-')
textOnScreen = textOnScreen + "-";
else
textOnScreen = textOnScreen.substring(0, textOnScreen.length() - 1);
break;
case 19: //BACKSPACE
if(textOnScreen.length() == 1)
textOnScreen = "0";
else
textOnScreen = textOnScreen.substring(0, textOnScreen.length() - 1);
break;
case 20: //SOLVE
solveEquation();
break;
default://concat all of the other buttons pressed
textOnScreen = textOnScreen + buttonList[j].getText();
break;
}
}
});
}
return textOnScreen;
}
您不应为每个按钮多次设置 OnClickListener。
将 String getValuesPressed() 函数更改为 void setButtonClickEvents()。
此外,您不需要 updateEditText() 函数。
不要连接 textOnScreen,而是直接连接 EditText:
case 0://CLEAR
et.setText("0");
break;
case 5://SQRT
solveEquation();
//CASE: IF IT IS NEG U CANT TAKE THE SQRT!!!!
et.setText(String.valueOf(Math.sqrt(Double.parseDouble(et.getText().toString())));
break;
等等。
你的整个代码对我来说真的没有意义。您应该做的第一件事是向所有按钮添加 onClickListener
。这个监听器可能看起来像这样:
@Override
public void onClick(View v) {
System.out.println("THE BUTTON WAS PRESSED: " + ((Button)v).getText();
switch(v.getId()){
case R.id.<ID of this Button>://CLEAR
et.setText("0");
break;
case R.id.<ID of this Button>://SQRT
solveEquation();
//CASE: IF IT IS NEG U CANT TAKE THE SQRT!!!!
et.setText(String.valueOf(Math.sqrt(Double.parseDouble(textOnScreen))));
break;
case R.id.<ID of this Button>: //NEGATIVE
if(et.getText().charAt(et.getText().length() - 1) != '-')
et.setText(et.getText + "-");
else
et.setText(et.getText().toString().substring(0, et.getText().length() - 1));
break;
case R.id.<ID of this Button>: //BACKSPACE
if(et.getText().length() == 1)
et.setText("0");
else
et.setText(et.getText().toString()substring(0, et.getText().length() - 1));
break;
case R.id.<ID of this Button>: //SOLVE
solveEquation();
break;
}
}
我正在尝试制作一个计算器应用程序来显示用户在编辑文本屏幕上单击的所有内容,但是,当用户单击一个按钮时,编辑文本屏幕仍然是空白的。我已经放置了一些打印语句以查看会发生什么,这是我发现的:
updateEditText()
中的打印语句始终为空白,即使用户单击了一个按钮,但 getValuesPressed()
中的打印语句成功地打印出了单击按钮的位置。
我不明白我做错了什么。
这是我的资料:
void updateEditText(){
EditText et = (EditText) findViewById(R.id.editText);
System.out.println("THE VALUE PRESSED IS: " + getValuesPressed());
et.setText(getValuesPressed());//problem here
}
//return and concat the buttons that were clicked
String getValuesPressed(){
for(int i = 0; i < buttonList.length; i++){
final int j = i;
buttonList[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("THE BUTTON WAS PRESSED: " + buttonList[j].getText());
switch(j){
case 0://CLEAR
textOnScreen = "0";
break;
case 5://SQRT
solveEquation();
//CASE: IF IT IS NEG U CANT TAKE THE SQRT!!!!
textOnScreen = String.valueOf(Math.sqrt(Double.parseDouble(textOnScreen)));
break;
case 18: //NEGATIVE
if(textOnScreen.charAt(textOnScreen.length() - 1) != '-')
textOnScreen = textOnScreen + "-";
else
textOnScreen = textOnScreen.substring(0, textOnScreen.length() - 1);
break;
case 19: //BACKSPACE
if(textOnScreen.length() == 1)
textOnScreen = "0";
else
textOnScreen = textOnScreen.substring(0, textOnScreen.length() - 1);
break;
case 20: //SOLVE
solveEquation();
break;
default://concat all of the other buttons pressed
textOnScreen = textOnScreen + buttonList[j].getText();
break;
}
}
});
}
return textOnScreen;
}
您不应为每个按钮多次设置 OnClickListener。 将 String getValuesPressed() 函数更改为 void setButtonClickEvents()。
此外,您不需要 updateEditText() 函数。 不要连接 textOnScreen,而是直接连接 EditText:
case 0://CLEAR
et.setText("0");
break;
case 5://SQRT
solveEquation();
//CASE: IF IT IS NEG U CANT TAKE THE SQRT!!!!
et.setText(String.valueOf(Math.sqrt(Double.parseDouble(et.getText().toString())));
break;
等等。
你的整个代码对我来说真的没有意义。您应该做的第一件事是向所有按钮添加 onClickListener
。这个监听器可能看起来像这样:
@Override
public void onClick(View v) {
System.out.println("THE BUTTON WAS PRESSED: " + ((Button)v).getText();
switch(v.getId()){
case R.id.<ID of this Button>://CLEAR
et.setText("0");
break;
case R.id.<ID of this Button>://SQRT
solveEquation();
//CASE: IF IT IS NEG U CANT TAKE THE SQRT!!!!
et.setText(String.valueOf(Math.sqrt(Double.parseDouble(textOnScreen))));
break;
case R.id.<ID of this Button>: //NEGATIVE
if(et.getText().charAt(et.getText().length() - 1) != '-')
et.setText(et.getText + "-");
else
et.setText(et.getText().toString().substring(0, et.getText().length() - 1));
break;
case R.id.<ID of this Button>: //BACKSPACE
if(et.getText().length() == 1)
et.setText("0");
else
et.setText(et.getText().toString()substring(0, et.getText().length() - 1));
break;
case R.id.<ID of this Button>: //SOLVE
solveEquation();
break;
}
}