كيفية استخدام setMultichoiceItems () مع تنبيه مخصص يستخدم ArrayAdapter الكفاءة؟

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

  •  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);                         
    }

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

المحلول

أشير هذه و هذه

ثم تمرير إشارة إلى البايت [] في setMultiChoiceItems().

final boolean[] booleans = {false, true, false, true, false, false, false};

ثم تحقق من قيمة booleans داخل setPositiveButton().

إذا كنت بحاجة إلى تمرير هذا AlertDialog حولها ، ثم تمتد AlertDialog وإنشاء حقل منطقي كما هو موضح في 1.

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