Это может быть то, что вы хотите.Я использую флаг, чтобы после того, как я установил тему в операции настройки и вернулся к этой операции вызова, то операция вызова будет перезапущена, и теме будет присвоено некоторое значение в SharedPreferences
.
private boolean activityStarted = false;
public void onCreate(Bundle savedInstanceState) {
Log.d(DEBUG_TAG, "onCreate()");
activityStarted = true;
setTheme(); // user-defined method
super.onCreate(savedInstanceState);
...
}
@Override
protected void onResume() {
super.onResume();
Log.d(DEBUG_TAG, "onResume()");
if(activityStarted == true){ // it has come from onCreate()
activityStarted = false; // Set flag to false so that next time onResume()
// is called after resuming existing activity,
// the activity will be restarted and theme will
// be set
} else { // it has directly come to onResume()
finish();
startActivity(getIntent());
}
}
* 1004.* Обновление
Я не уверен, что это лучший способ сделать это, но вместо того, чтобы вводить логику в метод onResume()
, я переопределяю метод onActivityResult()
и перезапускаю Activity
, еслипредыдущий Activity
был Настройки Activity
.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.settings) {
Intent settings_intent = new Intent(this, Settings.class);
startActivityForResult(settings_intent, SETTINGS);
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
// Identify our request code
switch (reqCode) {
case SETTINGS:
if (resultCode == RESULT_CANCELED) {
Log.d(DEBUG_TAG, "RESULT_CANCELED");
finish();
startActivity(getIntent());
} else if (resultCode == RESULT_OK) {
Log.d(DEBUG_TAG, "RESULT_OK");
}
break;
}
}