Domanda

è possibile righe specifiche programatically di accesso in un elenco di CheckedTextViews per cambiare lo stato delle loro caselle di testo?

il mio programma ha un listview che ha diverse CheckedTextViews cui l'utente può premere per stato di commutazione.

Voglio salvare lo stato delle caselle di controllo quando le foglie degli utenti l'attività, così ho nel mio metodo 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();
     }

che itera in modo molto semplice la visualizzazione elenco, aggiunge gli elementi selezionati a un ArrayList e quindi salva quella lista di ID al database.

Il mio problema lise nel tentativo di ripristinare la lista una volta che un utente torna a tale attività.

finora nel mio metodo onStart, ricordo gli elementi selezionati dal database, ma non so come marciare gli id ??restituiti agli elementi ListView. posso fare qualcosa di simile:

listView.getElementById(id_from_database).setChecked?

So che cant utilizzare getElementById ma ce l'ho qui per mostrare quello che voglio dire

Grazie in anticipo

Kevin

È stato utile?

Soluzione 2

Questo è ciò che Ive ha finito per fare .. ma sembra come un hack completo. Fondamentalmente ho di istituire un doppio ciclo for .. uno per scorrere i miei elementi di lista, e uno per scorrere il cursore che ho recuperato i miei lista di controllo dello stato (una semplice matrice di ID di elementi che sono stati controllati quando lo stato era ultima Saved)

il mio esterno per scorre gli elementi della lista di controllo ogni id contro un ciclo attraverso l'elenco di ID da impostare come controllato. se sono uguali tra loro quindi impostare tale elemento come controllato.

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

Ti prego, dimmi che c'è un modo più efficiente per raggiungere questo !!

Grazie

Kevin

Altri suggerimenti

È possibile chiamare

listView.setItemChecked(int position, boolean value)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top