如何在销毁后保存我的活动状态

时间:2014-03-17 05:45:21

标签: android android-layout

我使用以下代码更改按钮的背景:

 case R.id.purple:
          for (Button currentButton : buttons) {
                currentButton.setBackgroundResource(R.drawable.purple);
            }

它会改变所有按钮的颜色,但每当我改变屏幕方向或将活动带到bacground或关闭我的应用程序时,背景颜色将恢复为其默认值。如何保存此信息以使其不会丢失和颜色按钮保持与我分配的相同。要保存整数或字符串值,我使用此代码:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(savedInstanceState);
  savedInstanceState.putString("MyString", inputText.getText().toString());
  // etc.
}

但我不知道如何保存按钮的状态。

2 个答案:

答案 0 :(得分:0)

您可以将您正在使用的drawable名称保存为字符串

savedInstanceState.putString("ButtonColor", "purple");

然后在onCreate

if(savedInstance != null)
{
String drawableName = savedInstance.getString("ButtonColor");
int drawableResourceId = getResources().getIdentifier(drawableName, "drawable", getPackageName());
                    currentButton.setBackgroundResource(getResources().getDrawable(drawableResourceId ));
}

答案 1 :(得分:0)

onSaveInstanceState()如果你的活动被按下BACK按钮,例如在其他一些情况下被破坏,则不会触发。

保存当前状态的最佳方法是将其保存在onDestroy()或onPause()中的SharedPreferences中,并加载到onCreate()中。这是一个例子:

@Override
public void onDestroy() {
  super.onDestroy();
  SharedPreferences user = getUserDataSharedPreferences(this);
  SharedPreferences.Editor ed = user.edit();
  ed.putInt("myColor", R.drawable.purple);
  ed.commit();
}

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  SharedPreferences user = getUserDataSharedPreferences(this);
  user.getInt("myColor", 0);
}

如果您在活动之外调用SharedPreferences,请将this替换为contextgetActivity()