ListPreference مع أقصى عدد من الخيارات للاختيار
-
19-09-2019 - |
سؤال
أريد أن يكون عنصرا في تفضيل بلدي القائمة أن يفعل ما يلي:
- تظهر قائمة من الخيارات.
- عديدة هي اختيار
- قدر ممكن من الخيارات التي يمكن اختيارها 2.
إمكانيات فكرت:
- القيام فصل
PreferenceScreen
و تظهر الخيارات كماcheckBoxes
, ولكن أنا لا أعرف أين مكان منطق ماكس 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);
}