对于个人项目,我正在制作一个可以从用户输入的字符串中解析正则表达式的计算器。
我现在的主要问题是,如果用户输入一些输入,比如说1 + 2,那么旋转设备,虽然我设法让我的程序在旋转后保留1 + 2,来自用户的任何其他输入将它擦除并用下一个输入完全替换它。 因此,如果我输入1 + 2,然后旋转设备,然后输入+ 4,设备将读取+ 4而不是1 + 2 + 4,就像我期待的那样。
到目前为止,这是我的代码,感谢您的帮助:
public class MyCalculator extends Activity {
String displayStr = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_calculator);
Button btnClear = (Button) findViewById(R.id.btnClear);
btnClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
displayStr = "";
TextView et= (TextView) findViewById(R.id.display);
et.setText(displayStr);
}
});
}
public void enterDigit(View view){
TextView et = (TextView) findViewById(R.id.display);
Button button = (Button)view;
if(et.getText().toString().compareTo("Unable to Parse") == 0){
displayStr = (String) button.getText();
}
else{
displayStr += button.getText();
}
et.setText(displayStr);
}
public void enterOperation(View view){
TextView et = (TextView) findViewById(R.id.display);
Button button = (Button)view;
if(et.getText().toString().compareTo("Unable to Parse") == 0){
displayStr = (String) button.getText();
}
else{
displayStr += " " + button.getText() + " ";
}
et.setText(displayStr);
}
public void enterClick(View v){ //TBD error checking
String s = "";
TextView et = (TextView) findViewById(R.id.display);
s = et.getText().toString();
s = TestParser.parse(s);
et.setText(s);
displayStr= "";
}
}
答案 0 :(得分:1)
如果您要设置可以实现的值:
@Override
public void onSaveInstanceState(Bundle out)
{
TextView et = (TextView) findViewById(R.id.display);
out.putString("etText", et.getText().toString());
//OR if it is always displayString
out.putString("displayString", displayString);
}
@Override
public void onRestoreInstanceState(Bundle in)
{
String prevText = (String)in.getString("etText");
displayString = (String)in.getString("displayString");
TextView et = (TextView) findViewById(R.id.display);
et.setText(prevText);
et.invalidate();
}
只会在活动状态发生变化时保存并存储值