[英]How to save state of game
我试图让我的应用程序在关闭或按下后退按钮时保存。 我想让它记住选中了哪些框以及得分是多少。
我尝试查看以前的文章以将复选框 state 保存到共享首选项,但它似乎没有任何作用。 我已经尝试了至少 5 种我在这里找到的不同方法,但它要么只是让应用程序崩溃,要么什么都不做。
这是我得到的代码:
public class levelOneActivity extends AppCompatActivity {
TextView scoreTextView;
Button backButton;
ConstraintLayout pictureConstraint;
Button nextLevelButton;
ListView levelOneListView;
ArrayAdapter arrayAdapter;
int score;
public static final String PREFS_NAME = "MyPrefsFile";
// SharedPreferences sharedPrefs = context.getSharedPreferences("sharedPrefs", Context.MODE_PRIVATE);
public void backButton(View view) {
pictureConstraint.setVisibility(View.INVISIBLE);
}
public void nextLevelButton(View view) {
Log.i("info", "next level!");
Intent intent = new Intent(getApplicationContext(), levelTwoActivity.class);
startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_level_one);
levelOneListView = findViewById(R.id.levelOneListView);
scoreTextView = findViewById(R.id.scoreTextView);
pictureConstraint = findViewById(R.id.pictureConstraint);
backButton = findViewById(R.id.backButton);
final ImageView imageView2 = findViewById(R.id.imageView2);
final TextView factTextView = findViewById(R.id.factTextView);
score = 0;
final ConstraintLayout levelFinishedConstraint = findViewById(R.id.finishedLevelConstraint);
nextLevelButton = findViewById(R.id.nextLevelButton);
final SharedPreferences sharedPreferences = this.getSharedPreferences("com.example.woodlandwanderer", Context.MODE_PRIVATE);
final String[] levelOneListList = new String[]{
"Daisy", "Rock", "Tree", "Dandelion", "Grass"
};
final int[] imageList = new int[]{
R.drawable.daisy, R.drawable.rock, R.drawable.tree, R.drawable.dandelion, R.drawable.grass
};
final String[] factList = new String[]{
"Daisies are cool", "Rocks are fun to throw!", "Trees have leaves!", "Dandelions are yellow", "Grass is green"
};
arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_checked, levelOneListList);
levelOneListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
pictureConstraint.setVisibility(View.VISIBLE);
imageView2.setImageResource(imageList[i]);
factTextView.setText(factList[i]);
return true;
}
});
levelOneListView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
levelOneListView.setAdapter(arrayAdapter);
levelOneListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Log.i("Info", "Clicked");
CheckedTextView checkedTextView = (CheckedTextView) view;
if (checkedTextView.isChecked()) {
if (score < 9) {
score++;
} else {
score++;
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
levelFinishedConstraint.setVisibility(View.VISIBLE);
}
}, 1000);
}
} else {
Log.i("Info", "Not checked");
score = score - 1;
}
scoreTextView.setText(Integer.toString(score) + "/10");
}
});
}
}
我建议您提出一个 xml 文件,您可以在其中为选中或未选中的框设置自己的标签。 每当用户退出程序或按下后退按钮时,应用程序关闭之前的最后一件事就是保存当前选中的 state 并替换旧版本。
保存当前 state 的另一种方法是数据库。 我会对其进行修改,以便甚至可以输入 xml 样式,或者您只需将选中框的名称推送到您的数据库中。 始终是关闭应用程序之前的最后一步。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.