1

我要做的是在活动中保存一些数字,以便在活动再次开始时将它们添加到更多数字中。

我尝试在暂停时保存号码,然后在恢复时将它们添加到新号码中,它有点工作,但是当我旋转手机时,它再次添​​加保存的号码,有什么更好的方法来解决这个问题

一点代码

    if (getIntent().hasExtra("ResultBl100")) {
        editbl.setText(bl100 + "");

        numberOfBl = Integer.parseInt(editbl.getText().toString());
        totalSd = (float) (numberOfBl * 0.0024);
        editsd.setText(String.format("%.1f", totalSd));

        b = Float.parseFloat(editsd.getText().toString());
        totalCt = (int) Math.ceil(b * 7);
        ct.setText(Integer.toString(totalCt));
    }

    //sending back to start of app
    addAgain = (Button) findViewById(R.id.add_again);
    addAgain.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Amounts.this,
                ChooseMaterials.class);
            intent.putExtra("AddMore", ADD_MORE);
            startActivity(intent);
        } 
    }); 


@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();

    if (TextUtils.isEmpty(editBl.getText().toString())) {
        numberOfBl = 0;
    } else {
        numberOfBl = Integer.parseInt(editBl.getText().toString();
    }
    if (TextUtils.isEmpty(editSd.getText().toString())) {
        amountSd = 0;
    } else {
        amountSd = Float.parseFloat(editSd.getText().toString());
    }
    SharedPreferences prefs = getSharedPreferences(
            "SavedTotals", Context.MODE_PRIVATE);

    SharedPreferences.Editor editor = prefs.edit();
    editor.putInt("savedBl", numberOfBl);
    editor.putFloat("savedSd", amountSd);
    editor.commit();
}

@Override
protected void onResume() {
    super.onResume();
    SharedPreferences preferences = getSharedPreferences("SavedTotals",
        Context.MODE_PRIVATE);

    int blSaved = preferences.getInt("savedBl", 0);
    float sdSaved = preferences.getFloat("savedSd", 0);

    int numberBl = blSaved + numberOfBl;
    editBl.setText(Integer.toString(numberBl));

    float amountSds = sdSaved + amountSd;
    editSd.setText(Float.toString(amountSds));
}

活动图

我仍然坚持这一点,有人可以给我更多帮助,我附上了一张图片来展示我正在努力实现的目标。

用户从导致活动 ab 或 c 的菜单开始,他们在其中输入一些数字并最终进入最终活动,其中显示了一些总计,当用户在最后一个活动上按下按钮时,我想保存总计并将用户发回到他可以重新开始的菜单,当用户结束最后一个活动时,会有一组新的总数我想将保存的总数添加到新的总数中并显示它们

我现在尝试保存的实例状态和恢复实例状态,这与我在旋转手机时遇到的问题相同,它再次添​​加了保存的总数

4

3 回答 3

2

将您的值保存在一个包中,我可以在您想要的一秒钟内为您提供代码。

于 2013-05-01T21:00:01.183 回答
1

写入值示例

@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
    super.onSaveInstanceState(savedInsta nceState);

    // Save UI state changes to the savedInstanceState.
    // This bundle will be passed to onCreate if the process is
    // killed and restarted.
    savedInstanceState.putBoolean("MyBoolean", true);
    savedInstanceState.putDouble("myDouble", 1.9);
    savedInstanceState.putInt("MyInt", 1);
    savedInstanceState.putString("MyString", "Welcome back to Android");
    // etc.
}

提取值示例

@Override
public void onRestoreInstanceState(Bundle savedInstanceState)
{
    super.onRestoreInstanceState(savedIn stanceState);
    // Restore UI state from the savedInstanceState.
    // This bundle has also been passed to onCreate.
    boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
    double myDouble = savedInstanceState.getDouble("myDouble");
    int myInt = savedInstanceState.getInt("MyInt");
    String myString = savedInstanceState.getString("MyString");
}
于 2013-05-01T21:35:45.697 回答
-1

您可以通过此答案检测设备旋转。检测到旋转时禁用 onResume() 和 onPause() 中的函数。希望这可以帮助。

于 2013-05-01T21:02:57.073 回答