Смена цвета применяется только после пере захода в Activity

Сделал смену темы приложения по примеру этого видео, проблема заключается в следующем, изначально я нахожусь в Activity1 перехожу в Activity2 где условно, по нажатию меняю тему приложения, но при нажатии на onBackpressed возвращаюсь на Activity1 где тема ещё не применилась, чтобы она применилась нужно пере зайти в Activity1.

Как сделать так что бы при нажатии onBackpressed тема уже применилась на Activity1 и не нужно было пере заходить в неё.

Наглядная демонстрация

введите сюда описание изображения

Моя Activity1

public class ActivitySettings extends AppCompatActivity {
    String getThemeku;
    String themeku = "";
    String SHARED_PREFS = "codeTheme";

    ScrollView sv;

    CardView back, cv_theme;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);

        sv = findViewById(R.id.sv);

        back = findViewById(R.id.back_settings);
        back.setOnClickListener(v -> onBackPressed());

        cv_theme = findViewById(R.id.cv_theme);
        cv_theme.setOnClickListener(v -> {
            Intent intent = new Intent(ActivitySettings.this, ActivityTheme.class);
            startActivity(intent);
        });
        changeOurTheme();
    }

    public void changeOurTheme() {
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
        getThemeku = sharedPreferences.getString(themeku, "");
        if (getThemeku.equals("light_theme")) {
            sv.setBackgroundResource(R.color.lt_color_main);
        } else if (getThemeku.equals("dark_theme")) {
            sv.setBackgroundResource(R.color.dt_color_main);
        }
    }
}

Моя Activity2

public class ActivityTheme extends AppCompatActivity {
    String getThemeku;
    String themeku = "";
    String SHARED_PREFS = "codeTheme";

    CardView back_theme, cv_dt, cv_lt;

    ScrollView sv;

    ImageView iv_arrow;

    TextView tv_title;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_theme);

        sv = findViewById(R.id.sv);
        iv_arrow = findViewById(R.id.iv_arrow);
        tv_title = findViewById(R.id.tv_title);

        back_theme = findViewById(R.id.back_theme);
        back_theme.setOnClickListener(v -> onBackPressed());


        cv_dt = findViewById(R.id.cv_dt);
        cv_dt.setOnClickListener(v -> {
            sv.setBackgroundResource(R.color.dt_color_main);
            String themeku1 = "";
            SharedPreferences sharedPreferences1 = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
            SharedPreferences.Editor editor1 = sharedPreferences1.edit();
            editor1.putString(themeku1,"dark_theme");
            editor1.apply();
        });

        cv_lt = findViewById(R.id.cv_lt);
        cv_lt.setOnClickListener(v -> {
            sv.setBackgroundResource(R.color.lt_color_main);
            String themeku2 = "";
            SharedPreferences sharedPreferences2 = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
            SharedPreferences.Editor editor2 = sharedPreferences2.edit();
            editor2.putString(themeku2,"light_theme");
            editor2.apply();
        });
        changeOurTheme();
    }
    public void changeOurTheme() {
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
        getThemeku = sharedPreferences.getString(themeku, "");
        if (getThemeku.equals("light_theme")) {sv.setBackgroundResource(R.color.lt_color_main);}
        else if (getThemeku.equals("dark_theme")) {sv.setBackgroundResource(R.color.dt_color_main);}
    }
}

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

Автор решения: Анастасия

Когда Вы нажимаете "назад" из Activity2, Вы видите Activity1, которая осталась в стеке, она не открывается заново, а как бы берется из истории.

Чтобы решить эту проблему, можно в Activity1 при открытии Activity2 удалить текущую активность из стека. Для этого, например, можно дописать в этом кусочке функцию finish():

cv_theme.setOnClickListener(v -> {
    Intent intent = new Intent(ActivitySettings.this, ActivityTheme.class);
    startActivity(intent);
    finish(); //"заканчиваем" текущую активность
});

Соответственно, при переходе назад в Activity2, теперь нужно указать, к какой активности перейти, ведь "история", или стек, отсутствует. Для этого можно дописать такой метод:

@Override
public void onBackPressed()
{
     Intent intent = new Intent(ActivityTheme.this, ActivitySettings.class);
     startActivity(intent);
     finish();
}

Также ещё один способ очистить стек описан здесь

→ Ссылка