有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

启动活动时未保存java首选项并清除变量

在我的MainActivity上,我有一个计数器跟踪赢家、平手和输家,单击按钮后,启动另一个活动,当该活动完成时,询问用户他们是赢了、平手还是输家。我正在尝试更新主活动上的计数器,但首选项似乎没有正确存储。在完成第二个活动并返回第一个活动后,计数器会更新,但当再次转到第二个活动时,计数器会被清除并恢复为零。这些首选项似乎也没有保存,尽管之前已成功使用

调试没有任何结果,如果有任何意见,我将不胜感激

从主要活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);

    new FlurryAgent.Builder().withLogEnabled(true).build(this, "");

    setContentView(R.layout.activity_main);

    SharedPreferences pref = getApplicationContext().getSharedPreferences("MainPref", MODE_PRIVATE);
    final SharedPreferences.Editor editor = pref.edit();

    editor.putInt("wins", numberOfWins);
    editor.putInt("draws", numberOfDraws);
    editor.putInt("losses", numberOfLosses);

    numberOfWins = pref.getInt("wins", 0);
    numberOfDraws = pref.getInt("draws", 0);
    numberOfLosses = pref.getInt("losses", 0);

    TextView wins = findViewById(R.id.numberOfWins);
    wins.setText(String.valueOf(numberOfWins));

    TextView draws = findViewById(R.id.numberOfDraws);
    draws.setText(String.valueOf(numberOfDraws));

    TextView losses = findViewById(R.id.numberOfLosses);
    losses.setText(String.valueOf(numberOfLosses));

    editor.commit();

从第二次活动开始:

final ImageButton completeBattle = findViewById(R.id.completeBattle);
    completeBattle.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final Dialog dialog = new Dialog(BattleActivity.this);
            dialog.setContentView(R.layout.custom_dialog);

            dialog.show();

            Button cancelBtn = dialog.findViewById(R.id.cancelBtn);
            cancelBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    dialog.dismiss();

                }
            });

            Button winBtn = dialog.findViewById(R.id.winBtn);
            winBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    MainActivity.numberOfWins++;

                    editor.clear();
                    editor.commit();



                    dialog.dismiss();

                    Intent intent = new Intent(BattleActivity.this, MainActivity.class);
                    startActivity(intent);

                }
            });

            Button drawBtn = dialog.findViewById(R.id.drawBtn);
            drawBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    MainActivity.numberOfDraws++;

                    editor.clear();
                    editor.commit();



                    dialog.dismiss();

                    Intent intent = new Intent(BattleActivity.this, MainActivity.class);
                    startActivity(intent);

                }
            });

            Button loseBtn = dialog.findViewById(R.id.loseBtn);
            loseBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    MainActivity.numberOfLosses++;

                    editor.clear();
                    editor.commit();




                    dialog.dismiss();

                    Intent intent = new Intent(BattleActivity.this, MainActivity.class);
                    startActivity(intent);

                }
            });

值得一提的是,我在第二个活动中运行了另一组首选项,用于跟踪不同的计数器集,当用户完成游戏时,这些计数器将重置


共 (1) 个答案

  1. # 1 楼答案

    当您启动一个活动时,它是一个新实例,不知道该活动的以前实例或它们的状态。您需要将需要从主活动启动的任何状态数据传递给活动,您可以使用意图的额外数据将数据传递给新活动。类似地,当第二个活动完成时,它需要使用startActivityForResult将数据传递回第一个活动

    基本上,您的主要活动需要存储所有持续存在的状态数据,然后将这些数据传递和接收给您的子活动