【发布时间】:2018-06-04 17:29:25
【问题描述】:
我有三个按钮,第一个被选中的按钮被标记为 X,而第二个被选中的按钮将被标记为 O,最后一个按钮再次被标记为 X。
如果标记为 X,则其颜色为白色,如果为 O,则标记为灰色。
现在我想做的是使用保存的实例,这样当我旋转手机时,颜色保持不变。实际发生的情况是,如果我旋转手机,然后做出最新的选择,所有文本都会恢复为该颜色。
因此,如果我按下 X 和 O 并旋转手机,X 和 O 都将显示为灰色,即 O 的颜色。
如果我然后选择最后一个 X 并旋转手机,所有字母将被标记为白色,这是 X 的颜色。
我不确定是否是造成它的设置颜色,或者是记住之前是谁移动它并根据它设置颜色,我的问题是如何解决它,以便所有字母保持旋转颜色?
private boolean playerOneMove = true;
private Button[][] buttons = new Button[1][3];
private static final String TEXT_COLOR = "textColor";
private String textColor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_player2);
btnObj1 = findViewById(R.id.button_00);
btnObj2 = findViewById(R.id.button_01);
btnObj3 = findViewById(R.id.button_02);
if (savedInstanceState != null) {
textColor = savedInstanceState.getString(TEXT_COLOR);
if(btnObj1 != null) {
btnObj1.setTextColor(Color.parseColor(textColor));
}
if (btnObj2 != null) {
btnObj2.setTextColor(Color.parseColor(textColor));
}
if (btnObj3 != null) {
btnObj3.setTextColor(Color.parseColor(textColor));
}
for (int i = 0; i < 1; i++) {
for (int j = 0; j < 3; j++) {
String buttonID = "button_" + i + j;
int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
buttons[i][j] = findViewById(resID);
buttons[i][j].setOnClickListener(this);
}
}
}
@Override
public void onClick(View v) {
if (!((Button) v).getText().toString().equals("")) {
return;
}
if (playerOneMove) {
((Button) v).setText("X");
textColor = "#e8e5e5";
((Button) v).setTextColor(Color.parseColor(textColor));
} else {
((Button) v).setText("O");
textColor = "#737374";
((Button) v).setTextColor(Color.parseColor(textColor));
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("playerOneMove", playerOneMove);
outState.putString(TEXT_COLOR, textColor);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) { ;
super.onRestoreInstanceState(savedInstanceState);
playerOneMove = savedInstanceState.getBoolean("playerOneMove");
textColor = savedInstanceState.getString(TEXT_COLOR);
}
【问题讨论】:
标签: java android android-button onsaveinstancestate