【问题标题】:Android program not appending string after rotateAndroid程序在旋转后不附加字符串
【发布时间】:2015-12-23 00:26:01
【问题描述】:

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

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

}
}

【问题讨论】:

    标签: android


    【解决方案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();
      }
      

    当 Activity 的状态改变时保存和存储值或

    1. 按照此示例实现 onConfigurationChanged:

    How to use onConfigurationChanged() and newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE in android 2.3.3

    【讨论】:

    • 所以不幸的是,我所做的基本上是附加到一个字符串,然后将完成的字符串解析为数学表达式。有趣的是,我的计算器可以很好地解析旋转的文本,如果我尝试向其中添加任何内容,它只会删除之前存在的任何内容。
    • 我的猜测是,如果你在短时间内旋转两次,它会失去对值的所有引用,对吧?
    • 好吧,无论哪种情况,应该在 onSaveInstanceState 中存储对该字符串的引用并在 onRestoreInstanceState 中检索该引用 编辑:好吧,如果您没有自动完成功能,则类似于: (SaveInstance) out .putString("keyToRetrieveInRestore", StringValue); (恢复) StringValue = (String)in.getString("keyToRetrieveInRestore");
    • 在短时间内旋转它任意次数似乎没问题。只是对字符串的任何修改都会擦除字符串。这么奇怪的小虫子。
    • 我想通了。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-12-16
    • 2011-08-29
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    相关资源
    最近更新 更多