アクティビティにはPreferenceFragment
が含まれています。ユーザーはこのアクティビティでアプリのスタイル(明るいテーマまたは暗いテーマ)を変更できます。今私は変更がすぐに見えるようにしたい。つまり、ユーザがPreferenceFragment
のスタイル設定を変更したときに、アクティビティのスタイルが変更されるようにします。アクティビティのスタイル設定をすぐに適用する
私の考えはPreferenceFragment
のOnSharedPreferenceChangeListener
で嗜好の変更を聞き、アクティビティを再作成することでした。
しかし、私はこれが正しい方法だとは思わない。では、ここでベストプラクティスは何ですか?前もって感謝します。
UPDATE
活動:
public class SettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadSettings();
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
}
private void loadSettings() {
SharedPreferences sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(this);
boolean darkTheme =
sharedPreferences.getBoolean(getText(R.string.pref_theme_key).toString(), false);
if (darkTheme) {
setTheme(R.style.DarkTheme);
}
}
}
PreferenceFragment:
public class SettingsFragment extends PreferenceFragment
implements SharedPreferences.OnSharedPreferenceChangeListener {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(getText(R.string.pref_theme_key))) {
// recreate Activity
}
}
}
設定:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:defaultValue="false"
android:key="@string/pref_theme_key"
android:title="@string/pref_theme" />
</PreferenceScreen>
しかし、どのように 'PreferenceFragment'がそれが含まれているアクティビティを再作成できますか?問題をより明確にするために、私は質問を更新し、いくつかのコードを追加しました。 –
'getActivity().recreate()'? –
あまりにも簡単でした。私は木々の森を見ることができませんでした。どうもありがとうございました。ところで、リスナーの登録と登録解除も必要です。 –