كيفية استخدام setMultichoiceItems () مع تنبيه مخصص يستخدم ArrayAdapter الكفاءة؟
-
25-09-2019 - |
سؤال
أنا أكتب مشغل موسيقى يستخدم محولًا مخصصًا يمتد BaseAdapter (محول الكفاءة) الذي أريد عرضه في AlertDialog
استخدام setAdapter()
حيث يمكن للمستخدم إما النقر فوق إحدى الأغاني للتبديل إلى هذا الموضع في قائمة التشغيل أو التحقق من الأغاني لإزالتها من قائمة التشغيل. حاولت استخدام مستمع نقر مخصص حتى يتمكن المستخدم من النقر لفترة طويلة لإزالة العنصر من القائمة ولكن listview
فقط لا يعمل بشكل صحيح ... كان يزيل العناصر الخاطئة (تلك الموجودة في النهاية) على الرغم من ArrayList
تحتوي على عناصر قائمة التشغيل الصحيحة ... (عندما أزلت العنصر من ArrayList
, ، نقلته إلى المحول الذي دعا notifyDataSetChanged
... لكن هذا لم ينجح كما ذكرت. هناك بالتأكيد خطأ في AlertDialog ListView
... لأنه لا يوجد سبب لبرزت النتائج من النهاية بدلاً من العنصر الصحيح.
لذا ... الطريقة التالية التي أود تجربتها هي استخدام setMultiChoiceItems()
طريقة AlertDialog
... ولكن يبدو أنه لا يعمل مع محول مخصص ... صفائف بسيطة فقط. هل سأضطر إلى الفئة الفرعية AlertDialog
و Override
ال setMultiChoiceItems()
الطريقة أو هل هناك طريقة يمكنني جعلها تعمل مع ArrayAdapter
?
في الأساس ، لا يمكنني معرفة كيفية تكرار القائمة التي AlertDialog
يخلق أو ما إذا كان يمر حتى هذا العرض بطريقة أو بأخرى. بالإضافة إلى ذلك ، لا أعتقد أنه يمكنني حتى الاستماع إلى النقرات checkboxes
إذا أضفت هذه إلى الصف. أي مساعدة سوف تكون محل تقدير كبير.
تحرير: طرح الأسئلة هنا مثل السحر ... أجبت على سؤالي ... هكذا فعلت ذلك. أضفت تلميحًا لكل منهما checkbox
وهو موضع العنصر في ArrayList
. ثم استخدمت OnCheckedChangeListener
لالتقاط التحديدات. عندما تقوم بتعيين تلميح ، فإنه يضيف نصًا إلى checkbox
... منذ خلفية AlertDialog
هل أبيض (حتى بالنسبة للعناصر التي تم النقر فوقها؟) لقد قمت فقط بتعيين لون نص التلميح على شفاف.
holder.check.setHintTextColor(Color.TRANSPARENT);
holder.check.setHint(String.valueOf(position));
holder.check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
int position = Integer.parseInt((String) buttonView.getHint());
Log.v("onCheckedChanged", "Checked: "+isChecked+" returned: "+position+" which should be "+getItem(position).name);
}
});
المحلول