我是开发Android应用程序的菜鸟。我想问一下。我的PreferenceActivity如何在不返回MainActivity的情况下更新并再次转到PreferenceActivity。在此,我给出了一些改变PreferenceActivity主题的功能。这是我的PreferenceActivity:
公共类SettingsPreference扩展了PreferenceActivity {
SwitchPreference themeSwitch;
String myPref = "preferences";
SharedPreferences.Editor editor;
String summary;
int theme;
@Override
public void onCreate(Bundle savedInstanceState)
{
// TODO: Implement this method
final SharedPreferences.Editor editor = getSharedPreferences(myPref, MODE_PRIVATE).edit();
final SharedPreferences prefs = getSharedPreferences(myPref, MODE_PRIVATE);
final String summary = prefs.getString("stringSummary", "Default theme");
final int theme = prefs.getInt("intTheme", (android.R.style.Theme_DeviceDefault_Light));
setTheme(theme);
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings_preference);
themeSwitch = (SwitchPreference) findPreference("switchTheme");
themeSwitch.setSummary(summary);
if (themeSwitch != null) {
themeSwitch.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference arg0, Object isOnObject) {
boolean isThemeOn = (Boolean) isOnObject;
if (isThemeOn) {
Toast.makeText(SettingsPreference.this, "Theme Dark ON", Toast.LENGTH_SHORT).show();
editor.putString("stringSummary", "Theme Dark ON");
editor.putInt("intTheme", (android.R.style.Theme_DeviceDefault));
editor.apply();
themeSwitch.setSummary(summary);
} else {
Toast.makeText(SettingsPreference.this, "Theme Dark OFF", Toast.LENGTH_SHORT).show();
editor.putString("stringSummary", "Theme Dark OFF");
editor.putInt("intTheme", (android.R.style.Theme_DeviceDefault_Light));
editor.apply();
themeSwitch.setSummary(summary);
}
return true;
}
});
}
}
}
答案 0 :(得分:2)
如果更改“活动”布局,则只需重新启动它即可。 尝试在onPreferenceChange()的末尾添加它。
如果您使用的是API11 +,请调用活动。
this.recreate();
否则,我们只需要完成活动并以相同的意图再次启动它。
Intent intent = getIntent();
finish();
startActivity(intent);
答案 1 :(得分:0)
例如,如果您每20秒更新一次,则为代码:
import android.os.Handler;
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//update UI
}
},2000);
将它放入一个函数中并在运行中重新调用。