كيف يمكنني الحصول على المشاركين من النشاط المفضل في Android؟

StackOverflow https://stackoverflow.com/questions/2614719

سؤال

أنا أستخدم النشاط المفضل لإظهار بعض الإعدادات لتطبيقي. أنا أقوم بتضخيم الإعدادات عبر ملف XML بحيث يبدو أن oncreate (وأساليب الفصل الكاملة) مثل هذا:

public class FooActivity extends PreferenceActivity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        addPreferencesFromResource(R.xml.preference);
    }
}

جافادوك تفضيل النشاط التفضيل ينص علي

سيتم حفظ هذه التفضيلات تلقائيًا إلى المشاركين حيث يتفاعل المستخدم معها. لاسترداد مثيل من المشاركين التي سيستخدمها التسلسل الهرمي للتفضيل في هذا النشاط ، استدعاء GetDefaultSharedPreferences (Android.content.context) مع سياق في نفس الحزمة مثل هذا النشاط.

ولكن كيف أحصل على اسم المشترك في نشاط آخر؟ لا يمكنني الاتصال إلا

getSharedPreferences(name, mode)

في النشاط الآخر ، لكنني بحاجة إلى اسم المؤتمر المشترك الذي استخدمه النشاط المفضل. ما هو الاسم أو كيف يمكنني استرداده؟

هل كانت مفيدة؟

المحلول

import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);

تحديث

وفق التفضيلات المشتركة | برنامج Android Developer Tutorial (الجزء 13) بقلم ساي جيثا مينيس

قد توفر العديد من التطبيقات طريقة لالتقاط تفضيلات المستخدم على إعدادات تطبيق معين أو نشاط. لدعم هذا ، يوفر Android مجموعة بسيطة من واجهات برمجة التطبيقات.

التفضيلات عادة ما تكون أزواج القيمة. يمكن تخزينها على أنها "تفضيلات مشتركة" عبر أنشطة مختلفة في التطبيق (ملاحظة لا يمكن مشاركتها حاليًا عبر العمليات). أو يمكن أن يكون شيئًا يحتاج إلى تخزينه الخاص بالنشاط.

  1. التفضيلات المشتركة: يمكن استخدام التفضيلات المشتركة من قبل جميع المكونات (الأنشطة والخدمات وما إلى ذلك) للتطبيقات.

  2. تفضيلات التعامل مع النشاط: لا يمكن استخدام هذه التفضيلات إلا ضمن نشاط معين ولا يمكن استخدامه بواسطة مكونات أخرى للتطبيق.

تفضيلات المشتركة:

تتم إدارة التفضيلات المشتركة بمساعدة getSharedPreferences طريقة Context صف دراسي. يتم تخزين التفضيلات في ملف افتراضي (1) أو يمكنك تحديد اسم ملف (2) لاستخدامها للإشارة إلى التفضيلات.

(1) الطريقة الموصى بها هو استخدام الوضع الافتراضي ، دون تحديد اسم الملف

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

(2) إليك كيفية الحصول على المثيل عند تحديد اسم الملف

public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATE هو وضع التشغيل للتفضيلات. إنه الوضع الافتراضي ويعني الوصول إلى الملف الذي تم إنشاؤه بواسطة تطبيق الاتصال فقط. وهنانان آخران مدعومان MODE_WORLD_READABLE و MODE_WORLD_WRITEABLE. في MODE_WORLD_READABLE يمكن للتطبيق الآخر قراءة الملف الذي تم إنشاؤه ولكن لا يمكن تعديله. في حالة MODE_WORLD_WRITEABLE التطبيقات الأخرى لديها أيضا أذونات الكتابة للملف الذي تم إنشاؤه.

أخيرًا ، بمجرد أن يكون لديك مثيل التفضيلات ، إليك كيف يمكنك استرداد القيم المخزنة من التفضيلات:

int storedPreference = preferences.getInt("storedInt", 0);

إلى قيم المتجر في ملف التفضيل SharedPreference.Editor يجب استخدام الكائن. Editor هي واجهة متداخلة في SharedPreference صف دراسي.

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

يدعم المحرر أيضًا أساليب مثل remove() و clear() لحذف قيم التفضيل من الملف.

تفضيلات النشاط:

يمكن استخدام التفضيلات المشتركة بواسطة مكونات التطبيق الأخرى. ولكن إذا لم تكن بحاجة إلى مشاركة التفضيلات مع المكونات الأخرى وتريد أن يكون لديك تفضيلات خاصة في النشاط ، فيمكنك القيام بذلك بمساعدة getPreferences() طريقة النشاط. ال getPreference الطريقة تستخدم getSharedPreferences() الطريقة مع اسم فئة النشاط لاسم ملف التفضيل.

فيما يلي الرمز للحصول على التفضيلات

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

الرمز لتخزين القيم هو نفسه كما في حالة التفضيلات المشتركة.

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

يمكنك أيضًا استخدام طرق أخرى مثل تخزين حالة النشاط في قاعدة البيانات. لاحظ أن Android يحتوي أيضًا على حزمة تسمى android.preference. تحدد الحزمة الفئات لتنفيذ UIPENCES Application UI.

لرؤية بعض الأمثلة الأخرى تحقق من Android مخزن البيانات بعد على موقع المطورين.

نصائح أخرى

إذا لم يكن لديك إمكانية الوصول إليها getDefaultSharedPreferenes(), ، يمكنك استخدام getSharedPreferences(name, mode) بدلاً من ذلك ، عليك فقط المرور بالاسم الصحيح.

يقوم Android بإنشاء هذا الاسم (ربما يستند إلى اسم حزمة مشروعك؟). يمكنك الحصول عليها عن طريق وضع الرمز التالي في أ SettingsActivity onCreate(), ، ورؤية ماذا preferencesName هو.

String preferencesName = this.getPreferenceManager().getSharedPreferencesName();

يجب أن تكون السلسلة مثل com.example.projectname_preferences. رمز صلب في مكان ما في مشروعك ، وتمريره إلى getSharedPreferences() ويجب أن تكون على ما يرام.

أعلن هذه الطرق أولاً ..

public static void putPref(String key, String value, Context context) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(key, value);
    editor.commit();
}

public static String getPref(String key, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(key, null);
}

ثم اتصل بهذا عندما تريد وضع ما قبل:

putPref("myKey", "mystring", getApplicationContext());

استدعاء هذا عندما تريد الحصول على مسبق:

getPref("myKey", getApplicationContext());

أو يمكنك استخدام هذا الكائن https://github.com/kcochibili/tinydb-android-shared-preferences-turbo الذي يبسط كل شيء أكثر

مثال:

TinyDB tinydb = new TinyDB(context);

tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);

tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true); 

tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);

الاضطرار إلى تمرير السياق في كل مكان يزعجني حقًا. يصبح الرمز مطوّلة للغاية ولا يمكن السيطرة عليها. أفعل هذا في كل مشروع بدلاً من ذلك ...

public class global {
    public static Activity globalContext = null;

وضبطه في النشاط الرئيسي إنشاء

@Override
public void onCreate(Bundle savedInstanceState) {
    Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
            global.sdcardPath,
            ""));
    super.onCreate(savedInstanceState);

    //Start 
    //Debug.startMethodTracing("appname.Trace1");

    global.globalContext = this;

كما يجب أن تكون جميع مفاتيح التفضيل مستقلة للغة ، لقد صدمت أحد لم يذكر ذلك.

getText(R.string.yourPrefKeyName).toString()

الآن نسميها ببساطة مثل هذا في سطر واحد من التعليمات البرمجية

global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);

إذا كان لديك خانة اختيار وترغب في جلب قيمةها ، أي صحيح / خطأ في أي ملف Java-

يستخدم--

Context mContext;
boolean checkFlag;

checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`

تحديث 2019

يمكنك ببساطة استخدام PowerPreference مكتبة

https://github.com/aliesaassadi/android-power-perference

الحصول على مثيل التفضيل المشترك

للحصول على المثيل الافتراضي ، تحتاج فقط إلى الاتصال

PowerPreference.getDefaultFile()

أو إذا كنت تريد ملف تفضيل معين

PowerPreference.getFileByName(fileName)

بيانات الكتابة:

PowerPreference.getDefaultFile().put(key,value)

الحصول على البيانات

PowerPreference.getDefaultFile().getString(key,value)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top