IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

onSaveInstanceState sur une listView


Sujet :

Composants graphiques Android

  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2002
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2002
    Messages : 203
    Par défaut onSaveInstanceState sur une listView
    Bonjour,

    On viens de me faire remarquer que quant la rotation de l'écran est déclenchée, je pers la saisie que j'ai effectuée dans ma ListView.

    Après quelque recherche sur le net, j'ai appris qu'il fallait utiliser la méthode onSaveInstanceState pour mémoriser ces données, mais je ne vois pas comment l'implanter dans mon code:

    Voila comment est généré ma ListView:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_fils);
     
            tvTitre = (TextView)findViewById(R.id.TV_Fils_Nom);
            tvDate = (TextView)findViewById(R.id.TV_Fils_Date);
     
            btnSave = (Button)findViewById(R.id.btn_save);
            btnSave.setOnClickListener(ListenerSave);
     
            datasource = new GenericBDD(this);
            datasource.open();
     
            idpere = (int) getIntent().getSerializableExtra("idpere");
            iduser = (int) getIntent().getSerializableExtra("iduser");
            mode = (int) getIntent().getSerializableExtra("mode");
     
            pere = datasource.getMonPere(idpere);
            nompere = pere.getNomPere();
            datepere = pere.getDatePere();
     
            switch (mode){
                case MODE_SELECT:
                    btnSave.setVisibility(View.INVISIBLE);
                    Refreshfils(idpere, nompere, datepere);
                    break;
                case MODE_MODIF:
                    btnSave.setVisibility(View.VISIBLE);
                    Refreshfils(idpere, nompere, datepere);
                    break;
            }
        }
     
        public void Refreshfils(int idpere, String nompere, String datepere) {
            tvTitre.setText(nompere);
            tvDate.setText(datepere);
     
            List<Fils> values = datasource.getAllFils(idpere);
     
            if (values.size() > 0) {
                this.adapterfils = new MorceauFilsAdapter(this, values, mode);
                ListView listFils = (ListView) findViewById(R.id.list_Fils);
                listFils.setAdapter(this.adapterfils);
            }
        }

    Avez vous une idée ?

  2. #2
    Membre Expert
    Avatar de MathiasSeguy
    Homme Profil pro
    Fondateur Android2EE - Formation Expertise Android
    Inscrit en
    Avril 2011
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fondateur Android2EE - Formation Expertise Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 185
    Billets dans le blog
    6
    Par défaut
    J'ai pas vu la saisie...
    Tu peux être plus clair? Je ne pense pas que ta liste soit vide quand on retourne le téléphone (tu recharges les données dans on create), mais j'ai pas bien compris.
    Ensuite, rien à voir, mais tu charges tes données trop tot, le mieux c'est onStart ou onResume.

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2002
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2002
    Messages : 203
    Par défaut
    En fait, a la base, je charge les données comme elle sont en base. (Mode SELECT)
    Ensuite, on passe en "modification" --> (on recharge cette meme activité, mais en mode modif cette fois) pour saisir de nouvelles données, et c'est a ce moment la, si on retourne le tel que les données saisies sont perdues.

    Apparement, le onSaveInstanceState se place dans l'activité qui charge la listview.
    toute la saisie s'effectue dans le "Fragment" (je sais pas si c'est le bon mot), enfin, dans la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     public class MorceauFilsAdapter extends ArrayAdapter<Fils>
    Sinon, pour le onResume, j'ai mis quasiment le meme code que dans le onCreate pour rappeler la méthode RefreshFils

  4. #4
    Membre Expert
    Avatar de MathiasSeguy
    Homme Profil pro
    Fondateur Android2EE - Formation Expertise Android
    Inscrit en
    Avril 2011
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fondateur Android2EE - Formation Expertise Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 185
    Billets dans le blog
    6
    Par défaut
    Tant que tu nous montres pas le code de saisie on va avoir du mal à t'aider même si on sait ce qu'il faut faire.
    Pourquoi dupliquer le même code de chargement de données dans onCreate et onResume ??? c'est le mal absolu mon grand.

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2002
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2002
    Messages : 203
    Par défaut
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
     
    public class MorceauFilsAdapter extends ArrayAdapter<Fils> {
     
        private int mode;
        private SparseArray<String> editedValues;
     
        //Constructeur
        public MorceauFilsAdapter(Context context, List<Fils> fils, int mode) {
            super(context, R.layout.activity_morceau_fils, R.id.TV_mFils_Nom,fils);
            this.mode = mode;
            this.editedValues = new SparseArray<String>();
        }
     
        //Déclaration du Holder
        private class ViewHolder {
            public TextView tvNom;
            public EditText etVal;
            public Switch swBool;
            public ImageButton btnDate;
            public TextWatcher watcher;
        }
     
        //Affichage de la listView
        public View getView(int position, View convertView, ViewGroup parent){
            View ret = super.getView(position,convertView,parent);
     
            ViewHolder holder = (ViewHolder) ret.getTag();
     
            //Chargement des objets du layout
            //Todo Voir bug rotation du clavier: Il faut utiliser la méhode: onSaveInstanceState
            if (holder == null) {
                holder = new ViewHolder();
                holder.tvNom = (TextView)ret.findViewById(R.id.TV_mFils_Nom);
                holder.etVal = (EditText)ret.findViewById(R.id.ET_mFils_Val);
                holder.etVal.requestFocusFromTouch();
                holder.swBool = (Switch)ret.findViewById(R.id.switch1);
                holder.btnDate = (ImageButton)ret.findViewById(R.id.BTN_mFils_date);
                ret.setTag(holder);
            } else {
                holder.etVal.removeTextChangedListener(holder.watcher);
            }
     
            //Chargement du fils
            final Fils fils = getItem(position);
            int type = fils.getTypeFils();
            String val = fils.getValeurFils();
            holder.tvNom.setText(fils.getNomFils());
     
            //Soit, on prend le TextWatcher, soit, la valeur du fils
            String value = this.editedValues.get(position);
            if (value == null)
                value = val;
     
            //Formatage de la date
            if (type == MaDatabase.TYPE_DATE && mode == ActivityFils.MODE_SELECT && value != null)
                value = value.substring(6, 8) + "/" + value.substring(4, 6) + "/" + value.substring(0,4);
     
            holder.etVal.setText(value);
     
            //Affichage d'un type texte
            if (type == MaDatabase.TYPE_TEXT) {
                defineVisibility(holder, 1, 1, 0, 0);
                holder.etVal.setInputType(InputType.TYPE_CLASS_TEXT);
            }

    Je viens d'essayer https://blog.denevell.org/android-sa...backpress.html
    mais ca a rien sauvegardé

    Pour le onCreate et onResume, le mieux serait d'appeler la meme methode c'est ca ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2002
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2002
    Messages : 203
    Par défaut
    Rebonjour,
    Je suis toujours bloqué par ce bug.
    J'arrive pas a appelé la méthode dans la classe MorceauFilsAdapter vu que c'est un ArrayAdapter.
    et quant je l’appelle dans l'activité principale, je n'arrive pas a l'implémenter.

    Avez vous une idée ?

Discussions similaires

  1. Bind une liste sur une ListView multicolonne
    Par olibara dans le forum C#
    Réponses: 6
    Dernier message: 10/12/2008, 11h36
  2. Infobulle sur une ListView
    Par Cedric33 dans le forum C#
    Réponses: 6
    Dernier message: 06/10/2008, 12h24
  3. Copier coller sur une listView
    Par themahg dans le forum Windows Forms
    Réponses: 3
    Dernier message: 17/05/2008, 12h21
  4. Drag drop et double click sur une listview
    Par mr_keyser dans le forum Windows Forms
    Réponses: 1
    Dernier message: 12/12/2007, 16h45
  5. Réponses: 4
    Dernier message: 01/12/2006, 11h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo