Смена цвета применяется только после пере захода в 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();
}
Также ещё один способ очистить стек описан здесь
