java - 如何保存游戏状态

标签 java android

我试图让我的应用程序在关闭或按下后退按钮时保存。我想让它记住哪些框被选中以及分数是多少。

我尝试浏览以前的文章将复选框状态保存到共享首选项,但它似乎没有做任何事情。我已经尝试了至少 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 文件,在其中为选中或未选中的框设置自己的标记。每当用户退出程序或按后退按钮时,应用程序关闭之前的最后一件事就是保存复选框的当前状态并替换旧版本。

保存当前状态的另一种方法是数据库。我会修改它,以便甚至可以输入 xml 样式,或者您只需将复选框的名称推送到数据库即可。始终是关闭应用程序之前的最后一步。

关于java - 如何保存游戏状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58114597/

相关文章:

java - 更新到 App Engine Java 11 标准环境 : Project Facets in Eclipse

java - 缩小操作栏后,抽屉导航切换不起作用

java - 在鼠标单击或触摸时将 box2d 主体隐藏

android - Appcenter Codepush 集成。无法将任务 'bundleDebugJsAndAssets' 添加为具有该名称的任务已存在

java - 嵌入式 Firebird 和 Log4j 配置

java - 使用 Look up map 比每次从 DB 加载慢?怎么会?

android - RxJava 在相同的阻塞 UI 线程上运行并且不显示 AlertDialog

android - 确定移动设备是否在移动的飞机上?

java - Spring OAuth2 的非常简单的示例

java - 围绕中心旋转图表