Question

est-il possible aux lignes spécifiques de l'accès programatically dans une liste de CheckedTextViews pour changer l'état de leurs zones de texte?

mon programme a un ListView qui a plusieurs CheckedTextViews que l'utilisateur peut appuyer à l'état de bascule.

Je veux enregistrer l'état des cases à cocher lorsque les feuilles de l'utilisateur l'activité, donc j'ai dans ma méthode 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();
     }

, qui le fait très simplement la vue de la liste, ajoute les éléments sélectionnés à un ArrayList et enregistre cette liste des ids à la base de données.

Mon problème en essayant de Lise réinitialiser la liste une fois qu'un utilisateur retourne à cette activité.

jusqu'à présent dans ma méthode onStart, je me rappelle les éléments sélectionnés de la base de données, mais je ne sais pas comment marche les ids retournés aux éléments ListView. puis-je faire quelque chose comme:

listView.getElementById(id_from_database).setChecked?

Je sais que je ne peux pas utiliser getElementById mais je l'ai ici pour montrer ce que je veux dire

Merci à l'avance

Kevin

Était-ce utile?

La solution 2

est ce que Ive a fini par faire .. mais il semble un hack complet. Fondamentalement, je dois mettre en place une double boucle .. un à itérer à travers mes éléments de la liste, et un à itérer par le curseur que je retreived mon état liste de vérification (un tableau simple des ids d'éléments qui ont été vérifiés lorsque l'état était dernier enregistrées)

my externe pour parcourt les éléments de la liste de contrôle chaque identifiant contre une boucle à travers la liste des identifiants à définir comme vérifié. si elles sont égales l'autre puis définissez cet élément comme vérifié.

    // 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();

S'il vous plaît me dire il y a un moyen plus efficace d'y parvenir !!

Merci

Kevin

Autres conseils

Vous pouvez appeler

listView.setItemChecked(int position, boolean value)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top