Можно ли программно взаимодействовать с одной и той же парой значений Preferences из разных Activity?

Это мой первый опыт программирования на java, и под Android в целом. И я пишу интерфейсную игру наподобие симулятора бомжа. К проблеме могут иметь отношение 2 activity. В игре есть достижения. После каждого игрового действия выполняется проверка на наличие показателей для достижения. Ниже код activity с достижениями. На всякий случай я продублировал это еще и в onResume() методе. Для краткости, код других достижений опущу, он аналогичный, только условия в if другие.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_achievements);
    acveteranisreached = findViewById(R.id.acveteranisreached);
    Pref = getPreferences(MODE_PRIVATE);
    veteran = Pref.getBoolean("veteran", false);
    if (veteran) {
        acveteranisreached.setText(R.string.achreached);
    }
}

А здесь код из главной activity. Эта функция вызывается после каждого игрового действия.

    public void checkgiveachievements() {
        if (battle == 10 && !veteran) {
            Pref = getPreferences(MODE_PRIVATE);
            SharedPreferences.Editor pr = Pref.edit();
            pr.putBoolean("veteran", true);
            pr.apply();
            showDialog(DIALOG_ACH_VETERAN);
        }
    }

Данная функция вызывается тоже после каждого игрового действия. но до предыдущей. По задумке она должна контролировать такой момент, чтобы игроку одно и то же достижение не выдавалось, если была начата новая игра, поскольку для их получения требуется и так очень много сделать.

 public void checkgetachievements() {
        Pref = getPreferences(MODE_PRIVATE);
        veteran = Pref.getBoolean("veteran", false);
        }

При тестировании механизма достижений была обнаружена проблема. что достижения не регистрируются. Диалоговое окно с ним появляется, в обработчике нажатия на ОК стоит null. Если после его закрытия этой кнопкой выйти на экран меню посредством нажатия системной кнопки назад, и перейти с него на activity с достижениями, то там будет значение по умолчанию, а не то, условие для которого, казалось бы, должно быть выполнено, ведь был вызван метод pr.putBoolean("veteran", true);, и теперь при выполнении этого кода:

veteran = Pref.getBoolean("veteran", false);
if (veteran) {
    acveteranisreached.setText(R.string.achreached);
}

условие должно быть истинным. Но оно не истинное. Почему?


Ответы (0 шт):