Pregunta

¿es posible filas específicas de acceso mediante programación en una lista de CheckedTextViews para cambiar el estado de sus cuadros de texto?

mi programa tiene una vista de lista que tiene varias CheckedTextViews que el usuario puede pulsar para alternar el estado.

Quiero guardar el estado de las casillas de verificación cuando las hojas de los usuarios de la actividad, por lo que tengo en mi método 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();
     }

, que muy simplemente itera la vista de lista, añade los elementos seleccionados a un ArrayList y guarda la lista de identificadores a la base de datos.

Mi problema lise para tratar de restablecer la lista una vez que un usuario se remonta a esa actividad.

hasta ahora en mi método onStart, recuerdo los artículos seleccionados de la base de datos, pero no sé cómo marchan los identificadores devueltos a los elementos de lista. puedo hacer algo como:

listView.getElementById(id_from_database).setChecked?

Sé que puedo utilizar getElemenById pero lo tengo aquí para mostrar lo que quiero decir

Gracias de antemano

Kevin

¿Fue útil?

Solución 2

Esto es lo que he terminó haciendo .. pero parece que un corte completo. Básicamente tengo que configurar un doble bucle for .. uno para iterar a través de mis elementos de la lista, y uno para iterar a través del cursor que he recuperado la lista de control de mi estado (una simple tabla de id de los elementos que se comprueba cuando el estado era la última Guardado)

mi exterior para itera a través de los elementos de la lista de comprobación cada ID contra un bucle a través de la lista de identificadores que se establece como comprobado. si son iguales entre sí a continuación, establecer ese elemento como equipaje.

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

Por favor, dime que hay una manera más eficiente de lograr esto !!

Gracias

Kevin

Otros consejos

Puede llamar

listView.setItemChecked(int position, boolean value)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top