0

ユーザーが言語や時間形式などの設定を変更した直後にアクティビティを更新したいと考えています。これが私のコードです:

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 の概念をよく理解していないと思います。私はそれについてよく読んでいますが、明確にするか、私に追加のリンクを提供してもらえますか. 前もって感謝します。

4

1 に答える 1

0

ユーザーがシステム トリガーを変更したときに、システム トリガーを受け取る必要があります。これを行うには、情報を受け取るためのクラスが必要です。たとえば、時刻の変更については、このクラスをメインのアクティビティ クラスに配置します。

private final BroadcastReceiver timeChangedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent インテント) { final String action = intent.getAction();

        if (action.equals(Intent.ACTION_TIME_CHANGED) ||
            action.equals(Intent.ACTION_TIMEZONE_CHANGED))
        {
            doStuffYouNeedToDo();
        }
    }
};

doStuffYouNeedToDo時間またはタイムゾーンが変更されたときに必要な処理を実行するメソッドをアクティビティに記述します。確実に呼び出されるようにするには、これをクラスに入れます。

// For intent filter for catching timezone etc changes
private static IntentFilter timeChangeIntentFilter;
static {
    timeChangeIntentFilter = new IntentFilter();
    timeChangeIntentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
    timeChangeIntentFilter.addAction(Intent.ACTION_TIME_CHANGED);
}

そしてこれでonCreate

registerReceiver(timeChangedReceiver, timeChangeIntentFilter);

が停止したときにActivity停止するには、次のように入力しonDestroyます。

unregisterReceiver(timeChangedReceiver);
于 2013-08-29T18:08:30.970 に答える