android - كيفية - معرفة جيميل




كيفية اكتشاف ما إذا تم إجراء تغييرات في التفضيلات؟ (2)

لدي فصل دراسي يمتد إلى PreferenceActivity ويعرض شاشة التفضيلات الخاصة بتطبيقي. هل من الممكن التحقق من إجراء أي تغييرات على التفضيلات؟

هذا يساعد ...

http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html

وظيفة أخرى ذات صلة: SharedPreferences.onSharedPreferenceChangeListener لا يتم استدعاؤها باستمرار

public class PreferenceClass extends PreferenceActivity {

    OnSharedPreferenceChangeListener listener;

    public void onCreate(Bundle savedInstanceState) {
        SharedPreferences prefs = this.getSharedPreferences("settings", 0);
        listener = new SharedPreferences.OnSharedPreferenceChangeListener() {

            public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
                int flag = 1;
            }
        };
        prefs.registerOnSharedPreferenceChangeListener(listener);
        super.onCreate(null);
        addPreferencesFromResource(R.xml.settings);
    }
}

فعل

SharedPreferences.OnSharedPreferenceChangeListener spChanged = new
                           SharedPreferences.OnSharedPreferenceChangeListener() {
            @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {
        // your stuff here
    }
};

في PreferenceActivity الخاص بك ، أي registerOnSharedPreferenceChangeListener(spChanged) عضوًا في فئة PreferenceActivity الخاصة بك ، ثم قم registerOnSharedPreferenceChangeListener(spChanged) في الأسلوب PreferenceActivity.onCreate() .

هذا ما أفعله ولست لدي مشكلة.

آخر هو التحقق المشروط الخاص بك في المستمع الذي هو على خطأ. أضف الرمز.

تصحيح:

من الكود الذي نشرته ، يجب أن تجعل المتغير prefs متغيرًا لعضو الصف حتى يكون له نطاق عالمي.

والقيام prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); بدلاً من getSharedPreferences لأنك لم تنشئ هذا الملف.

لإنشاء ملف تحتاج إلى استخدام PreferenceManager . للحصول على PreferenceManager ، استخدم Activity.getPreferenceManager() .


في فئة PreferenceActivity ، قم بتطبيق واجهة SharedPreferences.OnSharedPreferenceChangeListener . قم بإضافة الطريقة المطلوبة على onSharedPreferenceChanged إلى صفك وقم بتسجيلها في onCreate .

انظر نموذج الكود هنا:

public class MyPreferences extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.fw_preferences); //deprecated
        PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        // handle the preference change here
    }

}




preferenceactivity