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

Android Discussion :

Changement de configuration Fragment


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Par défaut Changement de configuration Fragment
    Bonjour !

    Étudiant, je me forme actuellement au développement android, j'aurai besoin d'un peu d'aide. En effet, j'essaye de programmer une petite application qui contient un explorateur de fichier. L'application tourne correctement avec des Activity classique, mais je souhaite maintenant utiliser des fragments.

    Voici la portion de code qui me pose problème:

    Code : 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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    public class ImportFragment extends Fragment implements OnItemClickListener {
     
     
    	private FileAdapter fAdapter;
    	private TextView position;
    	private boolean quitterNav;
    	private File courant;
    	private File racine;
    	private ListView listeFichiers;
     
     
     
    	public boolean getQuitter(){
    		return this.quitterNav;
    	}
     
     
     
    	public File getCourant(){
    		return this.courant;
    	}
     
     
     
    	/*@Override
    	public void onActivityCreated(Bundle savedInstanceState){
     
    	}/*/
     
     
     
    	@Override
    	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
     
    		RelativeLayout tmp = (RelativeLayout) RelativeLayout.inflate(this.getActivity(), R.layout.vue_import, null);
     
    		this.listeFichiers = (ListView) tmp.findViewById(R.id.listeFichier);
    		this.listeFichiers.setOnItemClickListener(this);
    		this.position = (TextView) tmp.findViewById(R.id.sLocalisation);
     
     
    		Log.e("blabla", ""+this.courant);
     
     
    		if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
     
    			if(savedInstanceState == null){
    				this.quitterNav = true;
    				this.racine = Environment.getExternalStorageDirectory();
    				this.courant = this.racine;
    				this.position.setText(this.courant.getAbsolutePath());
     
    				File[] lFichiersBrute = this.courant.listFiles();
     
    				ArrayList<File> lFichiers = new ArrayList<File>();
    				ArrayList<File> lDossiers = new ArrayList<File>();
     
    				for(File f : lFichiersBrute){
    					if(!f.isHidden()){
    						lFichiers.add(f);
    					}
    				}
     
    				for(File f : lFichiers){
    					if(f.isDirectory()){
    						lDossiers.add(f);
    					}
    				}
     
    				lFichiers.removeAll(lDossiers);
     
    				this.fAdapter = new FileAdapter(this.getActivity(), lDossiers, lFichiers);
    				this.listeFichiers.setAdapter(fAdapter);
    			}
    			else{
    				this.racine = Environment.getExternalStorageDirectory();
    				this.quitterNav = savedInstanceState.getBoolean("quitterNav");
     
     
     
    				File[] lFichiersBrute = this.courant.listFiles();
     
    				ArrayList<File> lFichiers = new ArrayList<File>();
    				ArrayList<File> lDossiers = new ArrayList<File>();
     
    				for(File f : lFichiersBrute){
    					if(!f.isHidden()){
    						lFichiers.add(f);
    					}
    				}
     
    				for(File f : lFichiers){
    					if(f.isDirectory()){
    						lDossiers.add(f);
    					}
    				}
     
    				lFichiers.removeAll(lDossiers);
     
    				this.fAdapter = new FileAdapter(this.getActivity(), lDossiers, lFichiers);
    				this.listeFichiers.setAdapter(fAdapter);
    			}
    		}
    		else{
    			this.quitterNav = true;
    			this.position.setText("Erreur : Impossible de lire la mémoire externe");
    			this.position.setGravity(Gravity.CENTER);
    		}
     
    		return tmp;
    	}
     
     
     
    	protected void onSavedInstanceState(Bundle outState){
    		outState.putBoolean("quitter", this.quitterNav);
     
    		//Comment ajouter un objet File au Bundle ?
    	}
    Je souhaiterai donc savoir comment sauvegarder un objet de type java.io.File au moment du changement de configuration (changement de l'orientation de l'appareil dans mon cas) pour le récupérer au moment de la reconstruction de la vue.
    Dans le premier cas où j’héritai d'une Activity j'utilisais la méthode "public Object onRetainNonConfigurationInstance ()" avec une classe personnalisée. Je n'arrive pas à trouver un processus similaire avec les fragments.

    En vous remerciant d'avance !

  2. #2
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Salut,

    Voici un tutoriel sur le sujet
    http://mathias-seguy.developpez.com/...oid/fragments/


  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Par défaut
    Salut ! C'est justement avec ce tuto que je travaille.
    Le problème étant que je n'arrive pas à sauvegarder un objet de type File lors du changement de configuration avec les méthodes : "onSavedInstanceState(Bundle outState)" et "onRestoreInstanceState(Bundle savedInstance)".
    On ne peut ajouter d'objet directement dans un Bundle, j'ai donc essayer deux méthodes :

    La premier à l'aide de outState.putSerializable(key, value) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    protected void onSavedInstanceState(Bundle outState){
            outState.putBoolean("quitter", this.quitter);
            outState.putSerializable("courant", this.courant);
    }
     
     
    protected void onRestoreInstanceState(Bundle savedInstance) {	
    	this.quitterNav = savedInstance.getBoolean("quitter");
    	this.courant = (File) savedInstance.getSerializable("courant");
    }
    La deuxième à l'aide de outState.putParcelable(key, value) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    protected void onSavedInstanceState(Bundle outState){
    	outState.putParcelable("parcel", new SauvegardeConfig(this.quitterNav, this.courant));
    }
     
     
    protected void onRestoreInstanceState(Bundle savedInstance) {
    	SauvegardeConfig sv = (SauvegardeConfig) savedInstance.getParcelable("parcel");
     
    	this.quitterNav = sv.getQuitterNav();
    	this.courant = sv.getCourant();
     
    }
    Code : 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
    public class SauvegardeConfig implements Parcelable {	
     
     
    	private boolean quitterNavigateur;
    	private File courant;
     
     
     
    	public static final Parcelable.Creator<SauvegardeConfig> CREATOR = new Parcelable.Creator<SauvegardeConfig>(){
     
    		@Override
    	    public SauvegardeConfig createFromParcel(Parcel source){
    	        return new SauvegardeConfig(source);
    	    }
     
    	    @Override
    	    public SauvegardeConfig[] newArray(int size){
    			return new SauvegardeConfig[size];
    	    }
    	};
     
     
     
    	public SauvegardeConfig(boolean quitterNavigateur, File courant){
    		this.quitterNavigateur = quitterNavigateur;
    		this.courant = courant;
    	}
     
     
     
    	public SauvegardeConfig(Parcel in){
    		this.quitterNavigateur = in.readByte() != 0;
    		this.courant = (File) in.readSerializable();
    	}
     
     
     
    	@Override
    	public int describeContents() {
    		return 1;
    	}
     
     
     
    	@Override
    	public void writeToParcel(Parcel dest, int flags) {
    		dest.writeByte((byte) (this.quitterNavigateur ? 1 : 0));
    		dest.writeSerializable(this.courant);
    	}
     
     
     
    	public boolean getQuitterNav(){
    		return this.quitterNavigateur;
    	}
     
     
     
    	public File getCourant(){
    		return this.courant;
    	}
    }

    Dans les deux cas j'arrive à restaurer mon booléen mais impossible de restaurer mon objet de type File qui pointe toujours sur null.

    Une idée ? :o

  4. #4
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Salut,

    Ne peux tu pas simplement sauvegarder le chemin du fichier ?

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Par défaut
    J'ai finalement opté pour cette option ! Merci bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/07/2012, 17h06
  2. [Débutant] Test unitaires et changement de configuration.
    Par xarkam dans le forum C#
    Réponses: 1
    Dernier message: 17/01/2012, 12h04
  3. [Batch] changement de configuration réseau
    Par complicated dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 24/09/2010, 16h23
  4. changement de la configuration réseau
    Par cedric49fr2000 dans le forum Windows XP
    Réponses: 7
    Dernier message: 29/11/2007, 11h08
  5. [Configuration] Changement de l'adresse d'une page
    Par WELCOMSMAIL dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 01/08/2006, 09h49

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