Android程序在旋转后不附加字符串

时间:2015-12-23 00:26:01

标签: android

对于个人项目,我正在制作一个可以从用户输入的字符串中解析正则表达式的计算器。

我现在的主要问题是,如果用户输入一些输入,比如说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= "";

}
}

1 个答案:

答案 0 :(得分:1)

  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();
    }
    
  2. 只会在活动状态发生变化时保存并存储值

    1. 按照此示例实现onConfigurationChanged:
    2. How to use onConfigurationChanged() and newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE in android 2.3.3