ما هي أفضل طريقة لاستخدام التفضيلات المشتركة بين الأنشطة

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

  •  27-09-2019
  •  | 
  •  

سؤال

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

لديّ هذه الفكرة لإنشاء كائن تفضيل مشترك من النشاط الرئيسي ومن هناك إرسال نوايا إلى الأنشطة المختلفة لاتخاذ الإجراءات. هل يعمل هذا ...؟

أو استمر في الاتصال getsharedpreferences() من كل نشاط ..؟

شكرًا.

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

المحلول

يبدو أن إرسال التفضيلات المشتركة من خلال النوايا يبدو مبالغًا فيه. يمكنك لف التفضيلات المشتركة بشيء مثل أدناه والاتصال بالطرق مباشرة من أنشطتك:

public class Prefs {
    private static String MY_STRING_PREF = "mystringpref";
    private static String MY_INT_PREF = "myintpref";

    private static SharedPreferences getPrefs(Context context) {
        return context.getSharedPreferences("myprefs", 0);
    }

    public static String getMyStringPref(Context context) {
        return getPrefs(context).getString(MY_STRING_PREF, "default");
    }

    public static int getMyIntPref(Context context) {
        return getPrefs(context).getInt(MY_INT_PREF, 42);
    }

    public static void setMyStringPref(Context context, String value) {
        // perform validation etc..
        getPrefs(context).edit().putString(MY_STRING_PREF, value).commit();
    }

    public static void setMyIntPref(Context context, int value) {
        // perform validation etc..
        getPrefs(context).edit().putInt(MY_INT_PREF, value).commit();
    }
}

نصائح أخرى

يمكنك استخدام هذه الطريقة وإعلان نفس المتغيرات بنفس الاسم في جميع النشاطات التي تريد استخدامها.

  public static final String PREFS_NAME = "MyPrefsFile";
  static SharedPreferences settings;
  SharedPreferences.Editor editor;
  int wordCount;

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    settings = getSharedPreferences(PREFS_NAME, 0);
    editor = settings.edit();

    wordCount = settings.getInt("wordCount", 4); 

  }

هنا في البداية سوف يعطي WordCount 4 ؛ وعندما تقوم بتحرير WordCount وتريد التخزين مرة أخرى

  editor.putInt("wordCount", 6);
  editor.commit();

عليك أن تعلن هذه المتغيرات نفسها في الأنشطة التي تريد استخدام التفضيلات المشتركة. ومن الأفضل أن تسمي GetSharedPreferences في كل نشاط.

لا أعتقد أن تمرير هذا التفضيل في النية سوف يعمل.

يمكنك بالطبع استخدام التفضيلات المشتركة في تطبيقاتك.

إذا كان لديك أكثر من نوع بسيط من String أو Int ، فيمكنك استخدام Singleton أو تمديد فئة التطبيق التي يمكن الوصول إليها من خلال جميع أنشطة التطبيق الخاص بك. => لا الوصول إلى القرص هنا. ببساطة أبقى في الذاكرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top