在我的Android应用程序中,我正在创建一个tic tac toe游戏,我在下面有这个代码,如果它的玩家一动,那么将他们的选择设置为具有特定颜色的 X ,否则它必须是播放器2,所以将文本设置为 O ,以便选择不同的颜色。
@Override
public void onClick(View v) {
if (!((Button) v).getText().toString().equals("")) {
return;
}
if (playerOneMove) {
((Button) v).setText("X");
((Button) v).setTextColor(Color.parseColor("#e8e5e5"));
} else {
((Button) v).setText("O");
((Button) v).setTextColor(Color.parseColor("#737374"));
}
...
}
我遇到了一个问题,这是关于我何时旋转屏幕。当我旋转屏幕时,X和O的文本都变为android studio提供的默认文本颜色。我想保留这些文字的颜色,但我不知道该怎么做?我确保没有全局文本颜色集。
以下是处理方向更改的代码:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("playerOneMove", playerOneMove);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
playerOneMove = savedInstanceState.getBoolean("playerOneMove");
}
答案 0 :(得分:2)
您需要保存tic tac toe board的每个盒子的颜色,并在布局配置更改(即设备旋转)上再次保留它们。
您可以考虑查看answer here以获取有关问题的详细说明。您可以在此处检查developer documentation以处理配置更改。
关键的想法是将布局状态保存在配置发生变化的变量中,并在onCreate
或onCreateView
函数中相应地更新它们Activity
和{{1} } 分别。但是,在您的情况下,您需要存储大量数据,并且在每次配置更改时,您需要再次还原它们,这不是一种有效的方法。我建议您寻找其他可用选项,这些选项可以在布局的方向或配置更改后继续使用。
我强烈建议在您的情况下实现ViewModel
,它可以在应用程序配置更改后继续存在并以最有效的方式处理整个UI表示。我们的想法是将您的UI元素与Fragment
绑定,然后每次都从ViewModel
保留UI元素。它可以保留在准确状态,直到ViewModel
或Activity
完成。
在您的情况下,我想提供一个如何准备Fragment
的示例。让我们考虑您的ViewModel
是ViewModel
,它会保存您的主板的布局项目。
GameModel
现在,从您的public class GameModel extends ViewModel {
public final LiveData<Game> gameLiveData = new LiveData<>();
public GameModel() {
// trigger game load.
}
void doAction() {
// depending on the action, do necessary business logic calls and update the gameLiveData.
}
}
public class Game {
public static final int CROSS = 1;
public static final int ZERO = 0;
public int pos1 = -1; // Default values are -1, when the position is yet to be played
public int pos2 = -1;
public int pos3 = -1;
public int pos4 = -1;
public int pos5 = -1;
public int pos6 = -1;
public int pos7 = -1;
public int pos8 = -1;
public int pos9 = -1;
}
,您需要向Activity
类添加一个观察者,以相应地更新UI。
GameModel
希望有所帮助!