на панели инструментов моего приложения есть действие «изменить тему». Когда пользователь выбирает его, отображается диалоговое окно с двумя вариантами: светлая тема и темная тема. каждый меняет тему приложения. но когда я выбираю один, активность воссоздается и возвращается на первое место. тема не меняется. это метод onCreate ()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
drawer = findViewById(R.id.drawer);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this,
drawer,
toolbar,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Note note = new Note();
note.setText("text");
note.setTitle("title");
NoteLab.get(NoteListActivity.this).addNote(note);
Intent intent = NoteEditActivity.newIntent(NoteListActivity.this, note);
startActivity(intent);
}
});
recycler = findViewById(R.id.recycler_view);
recycler.setLayoutManager(new LinearLayoutManager(this));
updateUI();
и updateUI ():
public void updateUI() {
mNotes = NoteLab.get(this).getNotes();
if (mAdapter == null) {
mAdapter = new NotesAdapter(mNotes, this);
recycler.setAdapter(mAdapter);
} else {
mAdapter.setNotes(mNotes);
mAdapter.notifyDataSetChanged();
}
}
Показать диалог:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
startActivity(new Intent(this, PreferencesActivity.class));
return true;
case R.id.action_themes:
DialogFragment dialog = new ThemesDialog();
dialog.show(getSupportFragmentManager(), "tag");
default:
return super.onOptionsItemSelected(item);
}
}
Здесь я изменил тему:
public class ThemesDialog extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
String[] strings = getResources().getStringArray(R.array.themes);
return new AlertDialog.Builder(getActivity())
.setItems(strings, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
getActivity().setTheme(R.style.DarkTheme);
}
})
.create();
}
}