ユーザーが言語や時間形式などの設定を変更した直後にアクティビティを更新したいと考えています。これが私のコードです:
public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {
public static final String HOUR_FORMAT = "hourFormat";
public static final String LANGUAGE_CHOICE = "languageSelection";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals("hourFormat")) {
Preference connectionPref = findPreference(key);
// Set summary to be the user-description for the selected value
connectionPref.setSummary(Boolean.toString(sharedPreferences.getBoolean(key, true)));
}
else if(key.equals("languageSelection")) {
Preference connectionPref = findPreference(key);
// Set summary to be the user-description for the selected value
connectionPref.setSummary(sharedPreferences.getString(key, "English"));
}
}
@Override
protected void onResume() {
super.onResume();
// Set up a listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
// Unregister the listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
}
これは Preferences.xml です
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="hourFormat"
android:title="@string/hour24"
android:summary="@string/hour24Explanation"
android:defaultValue="true" />
<ListPreference
android:key="languageSelection"
android:entries="@array/languageValues"
android:summary="@string/languageSelection"
android:entryValues="@array/languageValues"
android:title="@string/language" />
</PreferenceScreen>
これは、アプリを再起動した場合にのみ機能します。しかし、変更直後にすぐに更新したいですか?(必要に応じて、アプリに他のソースコードを提供できます。リソースがたくさんあることは知っていますが、これを機能させることができませんでした。)
また、Java の xListener の概念をよく理解していないと思います。私はそれについてよく読んでいますが、明確にするか、私に追加のリンクを提供してもらえますか. 前もって感謝します。