簡體   English   中英

偏好設置立即更改后,如何更新我的活動?

[英]How can i update my activities after preference changes immediately?

我想在用戶更改語言或時間格式等設置后立即更新我的活動。 這是我的代碼:

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概念。 我讀了很多關於它的內容,但是您可以澄清一下還是提供其他鏈接給我。 提前致謝。

用戶更改它們時,您需要接收系統觸發器。 為此,您需要一個類來接收信息,例如,有關時間更改的信息,將該類放入主Activity類中:

私有最終的BroadcastReceiver timeChangedReceiver = new BroadcastReceiver(){@Override public void onReceive(Context context,Intent intent){final String action = intent.getAction();

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

在活動中編寫一個方法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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM