Программически доступа к конкретным строкам в списке CheckedTextViews - 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, а затем сохраняет этот список IDS в базу данных.

Моя проблема LISE, пытаясь сбросить список после того, как пользователь вернется к этой деятельности.

Пока в моем методе OnStart я вспоминаю проверенные элементы из базы данных, но я не знаю, как идти IDS, возвращаемые в элементы 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