我使用以下代码更改按钮的背景:
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.
}
但我不知道如何保存按钮的状态。
答案 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
替换为context
或getActivity()
。