من الناحية البرمجية ، قم بالوصول إلى صفوف محددة في قائمة CheckedTextView - Android

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

سؤال

هل من الممكن الوصول إلى صفوف محددة بشكل برمجي في قائمة CheckedTextViews لتغيير حالة مربعات النصوص الخاصة بهم؟

يحتوي برنامجي على ListView الذي يحتوي على العديد من CheckedTextViews التي يمكن للمستخدم الضغط عليها لتبديل الحالة.

أرغب في حفظ حالة مربعات الاختيار عندما يغادر المستخدم النشاط ، لذلك لدي في طريقة OnPause الخاصة بي:

public void onPause(){
         super.onPause();
         SparseBooleanArray positions;
         positions = listView.getCheckedItemPositions();
         ListAdapter items = listView.getAdapter();
         int j = items.getCount();

         ArrayList<Long> ids = new ArrayList<Long>();
         for (int k =0; k < j;k++){
             if(positions.get(k)==true){
                 ids.add(items.getItemId(k));   
             }
         } 
         this.application.getServicesHelper().open();
         this.application.getServicesHelper().storeServices(ids,visit_id);
         this.application.getServicesHelper().close();
     }

الذي يكرر ببساطة عرض القائمة ، يضيف العناصر التي تم فحصها إلى قائمة ArrayList ثم يحفظ قائمة المعرفات هذه إلى قاعدة البيانات.

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

حتى الآن في طريقة OnStart الخاصة بي ، أتذكر العناصر التي تم فحصها من قاعدة البيانات ، لكنني لا أعرف كيفية مسيرة المعرفات التي تم إرجاعها إلى عناصر ListView. هل يمكنني فعل شيء مثل:

listView.getElementById(id_from_database).setChecked?

أعلم أنني لا أستطيع استخدام getElementById ولكن لدي هنا لإظهار ما أعنيه

شكرا مقدما

كيفن

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

المحلول 2

هذا ما انتهى به الأمر .. لكن يبدو أنه اختراق كامل. في الأساس ، يجب أن أقوم بإعداد مزدوج للحلقة .. واحد لتكرار عناصر قائمتي ، وواحد للتكرار من خلال المؤشر الذي قمت باسترداده حالة قائمة الشيك أنقذ)

يكرر خارجي من خلال عناصر القائمة التي تحقق كل معرف مقابل حلقة من خلال قائمة المعرفات المراد تعيينها كما هو محدد. إذا كانوا يساويون بعضهم البعض ، فقم بتعيين هذا العنصر كما هو محدد.

    // mAdapter is contains the list of elements I want to display in my list. 
ServiceList.this.setListAdapter(mAdapter);

        // Getting a list of element Ids that had been previously checked by the user. getState is a function I have defined in my ServicesAdapter file.

    Cursor state = ServiceList.this.application.getServicesHelper().getState(visit_id);
    int checks = state.getCount();
    int check_service;               
    int c = mAdapter.getCount();
    if(checks>0){
        state.moveToFirst(); 
        for (int i=0; i<checks; i++) { 
            // set check_service = the next id to be checked
            check_service = state.getInt(0);
            for(int p=0;p<c;p++){

                if(mAdapter.getItemId(p)==check_service){
                        // we have found an id that needs to be checked. 'p' corresponds to its position in my listView
                    listView.setItemChecked(p,true);
                    break;
                }
            }
            state.moveToNext(); 
        } 
    }
    ServiceList.this.application.getServicesHelper().close();

من فضلك قل لي أن هناك طريقة أكثر كفاءة لتحقيق هذا !!

شكرًا

كيفن

نصائح أخرى

تستطيع الاتصال

listView.setItemChecked(int position, boolean value)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top