Frage

ist es möglich, programmatisch Zugriff bestimmter Zeilen in einer Liste von CheckedTextViews den Zustand ihrer Textfelder zu ändern?

mein Programm hat eine Listenansicht, die mehrere CheckedTextViews hat, die der Benutzer Umschaltfunktion drücken kann.

Ich möchte den Zustand der Kontrollkästchen speichern, wenn der Benutzer verlässt die Aktivität, so habe ich in meiner onPause Methode:

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

, die sehr einfach die Listenansicht iteriert, fügt die markierten Elemente an einem Arraylist und speichert dann diese Liste von IDs in der Datenbank.

Mein Problem lise bei dem Versuch, die Liste zurückzusetzen, nachdem ein Benutzer auf diese Tätigkeit zurückgeht.

bisher in meiner onStart Methode, Ich erinnere mich an die markierten Elemente aus der Datenbank, aber ich weiß nicht, wie die IDs zum Listenelement zurück zu marschieren. kann ich so etwas wie:

listView.getElementById(id_from_database).setChecked?

Ich weiß, ich kann nicht getElementById verwenden, aber ich habe es hier zu zeigen, was ich meine

Vielen Dank im Voraus

Kevin

War es hilfreich?

Lösung 2

Dies ist, was Ive tun endete .. aber es scheint, wie ein komplettes Hack. Im Grunde habe ich eine doppelte for-Schleife .. man Iterierte durch meine Listenelemente aufgebaut, und ein bis Iterierte durch den Cursor, dass ich meine Checkliste Zustand (ein einfaches Array von IDs von Elementen retreived haben, die geprüft wurden, als Zustand wurde zuletzt Saved)

meine Außen für iteriert durch die Listenelemente jedes id gegen eine Schleife durch die Liste der IDs Überprüfung festgelegt werden, wie geprüft. wenn sie sich gleich dann das Element gesetzt, wie überprüft.

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

Bitte sagen Sie mir, es ist ein effizienter Weg, um dies zu erreichen !!

Danke

Kevin

Andere Tipps

Sie können anrufen

listView.setItemChecked(int position, boolean value)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top