سؤال

أريد أن يكون عنصرا في تفضيل بلدي القائمة أن يفعل ما يلي:

  • تظهر قائمة من الخيارات.
  • عديدة هي اختيار
  • قدر ممكن من الخيارات التي يمكن اختيارها 2.

إمكانيات فكرت:

  1. القيام فصل PreferenceScreen و تظهر الخيارات كما checkBoxes, ولكن أنا لا أعرف أين مكان منطق ماكس 2 خيارات.
  2. تمديد DialogPreference وفعل ذلك قبل اليد.

ما هي أفضل طريقة ؟

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

المحلول

تمديد DialogPreference سوف تحصل أقرب من حيث الشكل والمظهر;على Preference الطبقات إلى حد ما unflexible و قابل للتمديد في تجربتي.

لا أستطيع أن أتذكر الكثير عن PreferenceScreen, ولكن أتصور أنها مماثلة.

في التطبيق عملت على, لقد انتهى الأمر باستخدام أنشطة منفصلة ، أطلقت عبر Intent من Preference البند onClick.وهذا يسمح لنا بسهولة تطوير تفضيل الشاشات التي تتطلب التحقق من صحة المنطق قليلا أكثر تعقيدا من المعتاد.

نصائح أخرى

يمكنك وضع منطق أقصى خيارين في OnSharedPreferenceChangeListener.

لذلك يمكنك فقط الاستماع إلى جميع التفضيلات أثناء تغييرها وتحديثها إذا تم تحديد مجموعة غير صالحة.

لذلك سيكون رمزك شيء مثل ما يلي:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) {
    //Code to calcuate how many are selected
    int code = numberSelected();

    if (count > 2) {
        sharedPreferences.edit().putBoolean(key,false).commit();
        Toast.makeText(this,"Can't select more than two!",Toast.LENGTH_LONG).show();
    }
}

إذا قمت بإنشاء خاصة بك PreferenceActivity هذا ينفذ OnSharedPreferenceChangeListener يمكنك تمكين المستمع من الاستماع فقط عند طلب شيء مثل هذا:

@Override
protected void onResume() {
super.onResume();
    //Register the listener
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}

@Override
protected void onPause() {
    super.onPause();
    // Unregister the listener
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top