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 :

AsyncTask Android et appel de méthodes externes.


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 5
    Par défaut AsyncTask Android et appel de méthodes externes.
    Bonjour,

    Je développe actuellement une application Android qui génère un formulaire.

    Pour générer se formulaire je crée beaucoup de composants graphiques (LinearLayout, EditText, TexView, RadioGroup...).
    La génération du formulaire me pose des soucis d'attente dans le thread principal, il se fige.

    Je souhaite donc faire cette génération dans une AsyncTask.

    N'ayant jamais utilisé d'autre Thread ou d'AsyncTask je n'ai peut être pas toutes les carte en mains pour comprendre d'ou viens l'erreur.

    Quand je procède de cette manière l'application plante sur la ligne qui instancie un EditText dans le controleur de vue.

    Auriez-vous quelques renseignement pour m'aider

    Merci.

    l'erreur en question :
    08-19 16:09:09.019 21314-21533/com.gecosdroid E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    Process: com.gecosdroid, PID: 21314
    java.lang.RuntimeException: An error occured while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:300)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:841)
    Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
    at android.os.Handler.<init>(Handler.java:200)
    at android.os.Handler.<init>(Handler.java:114)
    at android.sec.clipboard.ClipboardExManager$1.<init>(ClipboardExManager.java:123)
    at android.sec.clipboard.ClipboardExManager.<init>(ClipboardExManager.java:123)
    at android.app.ContextImpl$11.createService(ContextImpl.java:473)
    at android.app.ContextImpl$ServiceFetcher.getService(ContextImpl.java:365)
    at android.app.ContextImpl.getSystemService(ContextImpl.java:2079)
    at android.view.ContextThemeWrapper.getSystemService(ContextThemeWrapper.java:117)
    at android.app.Activity.getSystemService(Activity.java:4825)
    at android.widget.EditText.<init>(EditText.java:81)
    at android.widget.EditText.<init>(EditText.java:75)
    at android.widget.EditText.<init>(EditText.java:71)
    at com.gecosdroid.View.ViewCtrlFormulaire.genererEditText(ViewCtrlFormulaire.java:126)
    at com.gecosdroid.Controler.CtrlFormulaire.getComposant(CtrlFormulaire.java:447)
    at com.gecosdroid.Controler.CtrlFormulaire.access$600(CtrlFormulaire.java:41)
    at com.gecosdroid.Controler.CtrlFormulaire$GenererFormulaire.doInBackground(CtrlFormulaire.java:278)
    at com.gecosdroid.Controler.CtrlFormulaire$GenererFormulaire.doInBackground(CtrlFormulaire.java:205)
    at android.os.AsyncTask$2.call(AsyncTask.java:288)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    ************at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
    ************at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    ************at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    ************at java.lang.Thread.run(Thread.java:841)
    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
    121
    122
    123
    // ASYNCTASK
    private class GenererFormulaire extends AsyncTask<Void, Integer, Void>
    {
    	private ProgressBar mProgressBar = (ProgressBar) CtrlFormulaire.this._actForm.findViewById(R.id.pBAsync);
     
    	@Override
    	protected void onPreExecute() {
    		super.onPreExecute();
    		Toast.makeText(CtrlFormulaire.this._actForm, "Début du traitement asynchrone", Toast.LENGTH_LONG).show();
    	}
     
    	@Override
    	protected void onProgressUpdate(Integer... values){
    		super.onProgressUpdate(values);
    		// Mise à jour de la ProgressBar
    		mProgressBar.setProgress(values[0]);
    	}
     
    	@Override
    	protected void onCancelled(){
    		super.onCancelled();
    		// traitement à effectuer si la tâche est annulée
    	}
     
    	@Override
    	protected Void doInBackground(Void... arg0) {
    		Question que;
    		Reponse rep;
     
    		LinearLayout llSheet;
    		LinearLayout llQue;
    		LinearLayout llContRep = null;
    		LinearLayout llRep;
    		LinearLayout llSeprateur;
     
    		TextView txtQue;
    		TextView txtInf;
     
    		for (int i = 0; i < lstSheets.size(); i++)
    		{
    			llSheet = _vCtrlForm.genererLinearLayoutVerticale(i);
    			String nomSheet = lstSheets.get(i);
     
    			for (int j = 0; j < lstQuestions.size(); j++)
    			{
    				int compteur = 0;
    				que = lstQuestions.get(j);
    				String s = que.getLib_question();
    				String sheetQue = que.getSheet_question();
     
    				if (sheetQue.matches(nomSheet))
    				{
    					llQue = _vCtrlForm.genererLinearLayoutVerticale(j);
    					llSeprateur = _vCtrlForm.genererLinearLayoutSeparateur(j);
    					txtQue = _vCtrlForm.genererTextViewQuestion(j, s);
     
    					llQue.addView(txtQue);
     
    					for (int k = 0; k < lstReponses.size(); k++)
    					{
    						if ((compteur % 4) == 0)
    						{
    							llContRep = _vCtrlForm.genererLinearLayoutHorizontale(compteur);
    						}
     
    						rep = lstReponses.get(k);
     
    						if (rep.getId_question() == que.getId_question())
    						{
    							llRep = _vCtrlForm.genererLinearLayoutReponse(k);
     
    							int idListe = rep.getId_liste();
    							String libRep = rep.getLib_reponse();
     
    							View v = getComposant(idListe, k, libRep);
     
    							int idInformation = rep.getId_information();
     
    							im.open();
    							Information info = im.getInformation(idInformation);
    							im.close();
     
    							String information = info.getLib_information();
     
    							txtInf = _vCtrlForm.genererTextViewInfo(j, information);
     
    							llRep.addView(txtInf);
    							if (v != null)
    							{
    								llRep.addView(v);
    								lstComposants.add(v);
    							}
     
    							llContRep.addView(llRep);
     
    							compteur++;
    						}
    						if ((compteur % 4) == 0)
    						{
    							llQue.addView(llContRep);
    						}
    					}
    					if ((compteur % 4) != 0)
    					{
    						llQue.addView(llContRep);
    					}
     
    					llSheet.addView(llQue);
    					llSheet.addView(llSeprateur);
    				}
    			}
    			lstLLayoutSheet.add(llSheet);
    		}
    		return null;
    	}
     
    	@Override
    	protected void onPostExecute(Void result) {
    		Toast.makeText(CtrlFormulaire.this._actForm, "Le traitement asynchrone est terminé", Toast.LENGTH_LONG).show();
    		initialiserComposantFormulaire();
    		remplirSpinnerNavigation();
    	}
    }
    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
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    // METHODES DANS LE CONTROLEUR DE VUE
    	public LinearLayout genererLinearLayoutHorizontale(int idLayout)
    {
    	LinearLayout ll = new LinearLayout(this._actForm);
    	ll.setId(idLayout);
    	ll.setOrientation(LinearLayout.HORIZONTAL);
     
    	ll.isVerticalScrollBarEnabled();
     
    	return ll;
    }
     
    public RadioGroup genererRadioGroup(ArrayList<Choix> lstChx, int idReponse, String reponse)
    {
    	RadioGroup rg = new RadioGroup(this._actForm);
     
    	rg.setOrientation(LinearLayout.HORIZONTAL);
    	rg.setId(idReponse);
     
    	for (int i = 0; i < lstChx.size(); i++)
    	{
    		String libChx = lstChx.get(i).getLib_choix();
    		RadioButton rb = new RadioButton(this._actForm);
    		rb.setId(i);
    		rb.setText(libChx);
     
    		if (reponse.equals(libChx))
    		{
    			rb.setChecked(true);
    		}
     
    		rg.addView(rb);
    	}
     
    	return rg;
    }
     
    public Spinner genererSpinner(ArrayList<Choix> lstChx, int idReponse, String reponse)
    {
     
    	Spinner sp = new Spinner(this._actForm);
    	sp.setBackgroundResource(R.drawable.spinner_choix);
    	sp.setId(idReponse);
     
    	Spinner.LayoutParams lp = new Spinner.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 40);
    	sp.setLayoutParams(lp);
     
    	Choix chx;
    	ArrayList<String> lstChxString = new ArrayList<>();
     
    	ArrayAdapter<String> adChoix;
     
    	for (int i = 0; i < lstChx.size(); i++)
    	{
    		chx = lstChx.get(i);
    		lstChxString.add(chx.getLib_choix());
    	}
     
    	adChoix = new ArrayAdapter<>(this._actForm, android.R.layout.simple_list_item_1, lstChxString);
    	sp.setAdapter(adChoix);
     
    	for (int i = 0; i < lstChx.size(); i++)
    	{
    		chx = lstChx.get(i);
     
    		if (reponse.equals(chx.getLib_choix()))
    		{
    			sp.setSelection(i);
    		}
    	}
     
    	return sp;
    }
     
    public EditText genererEditText (int idReponse, String reponse)
    {
    	EditText et = new EditText(this._actForm);
    	et.setId(idReponse);
    	et.setSingleLine();
    	et.setText(reponse);
     
    	return et;
    }
     
    public TextView genererTextViewQuestion (int idReponse, String reponse)
    {
    	TextView tv = new TextView(this._actForm);
     
    	tv.setTextAppearance(this._actForm, R.style.question_texte);
    	tv.setId(idReponse);
    	tv.setText(reponse);
     
    	return tv;
    }
     
    public TextView genererTextViewInfo (int idReponse, String reponse)
    {
    	TextView tv = new TextView(this._actForm);
     
    	tv.setTextAppearance(this._actForm, R.style.information_texte);
    	tv.setId(idReponse);
    	tv.setText(reponse);
     
    	return tv;
    }
     
    public LinearLayout genererLinearLayoutVerticale(int idLayout)
    {
    	LinearLayout ll = new LinearLayout(this._actForm);
    	ll.setId(idLayout);
    	ll.setOrientation(LinearLayout.VERTICAL);
     
    	ll.isVerticalScrollBarEnabled();
     
    	return ll;
    }
     
    public LinearLayout genererLinearLayoutSeparateur(int idLayout)
    {
    	LinearLayout ll = new LinearLayout(this._actForm);
     
    	ll.setId(idLayout);
    	ll.setOrientation(LinearLayout.VERTICAL);
    	ll.setBackgroundResource(R.color.barre_separation);
     
    	LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 3);
    	lp.bottomMargin = 10;
    	lp.topMargin = 10;
     
    	ll.setLayoutParams(lp);
     
    	return ll;
    }
     
    public LinearLayout genererLinearLayoutReponse(int idLayout)
    {
    	LinearLayout ll = new LinearLayout(this._actForm);
    	ll.setId(idLayout);
    	ll.setOrientation(LinearLayout.VERTICAL);
     
    	LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
    																 ViewGroup.LayoutParams.MATCH_PARENT);
    	lp.weight = 1;
    	ll.setLayoutParams(lp);
     
    	return ll;
    }

  2. #2
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Il est interdit d'avoir la moindre interaction avec l'UI d'une activité durant à la méthode doInBackground(). Or, c'est ce que tu fait.

    Le choix de l'AsynTask n'est donc pas judicieux dans ton cas. Optes pour un bon vieux Thread classique.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Je rajouterais que si tu as besoin d'un thread à part pour générer ton interface graphique c'est qu"il y'a sans doute un problème de conception quelque part. C'est que tu as probablement plusieurs dizaine voir centaine d'élément à afficher dans ton formulaire. Autant dire que c'est vite inutilisable sur téléphone ou tablette.

    Il serait peut être judicieux de découper tout cela en plusieurs écrans et ainsi générer au fur et à mesure les éléments dont tu as besoin.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 34
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    Optes pour un bon vieux Thread classique.
    Je complèterai en disant que si tu utilises les threads, un appel à runOnUiThread(Runnable action) sera sûrement nécessaire pour modifier les éléments du UI.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 5
    Par défaut
    Mon soucis c'est que le traitement lourds est la Génération des Composants graphique.

    Si je ne peux utiliser mon second Thread pour générer ces composants comment faire ?

    Si je passe ma fonction complète dans un runOnUIThread c'est la même chose que de le faire dans le thread principal.


    EDIT : Est-ce que ça ne serai pas le fait que dans la génération du composant, je lui passe aussi une réponse et qu'il ajoute dans ce composant ?

    Je continue de faire des essaie pour mieux comprendre le fonctionnement des thread.

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Au niveau des thread tu as le thread principal , également appelé UI Thread qui est là pour tout ce qui est rendu graphique.
    C'est pour celà que l'on déconseille toute tache longue sur ce thread.

    Si tu as besoin de faire des traitement lourd (calcul , rendu , ...) ca va se faire sur un thread à part. Soit par une asyncTask , soit via un thread créer avec la classe Thread.

    On pourrait avoir un apercu de l'interface que tu essai de réaliser ?

    Quelles sont les tailles de tes différentes boucle ? lstSheets.size(); lstQuestions.size(); lstReponse.size(); ...
    J'ai l'impression que tu génère énormément de layout , ce qui est très certainement inutile et remplacable par autre chose de plus efficace
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 5
    Par défaut
    On pourrait avoir un apercu de l'interface que tu essai de réaliser ?
    Nom : Formulaire.png
Affichages : 116
Taille : 61,1 Ko

    Pour la génération du formulaire je procède comme suit :

    ScrollView (Il est fait dans le designer xml)
    LinearLayoutFormulaire (Il est fait dans le designer xml)
    LinearLayoutSheet
    LinearLayoutQuestion
    TextViewQuestion
    LinearLayoutConteneurDeReponse
    LinearLayoutReponse (Weight = 1)
    TextViewInformation
    ComposantGraphique(EditText "Qui peuvent avoir 3 propriétés différente "Numérique", "Date", "Normale"; RadioGroup ou Spinner)
    LinearLayoutSeparateur

    Il peut y avoir 1 à 1n LinearLayoutSheet. (On retrouve les noms dans le spinner au top)
    Un conteneur Reponse peux contenir 1 à n réponses.
    Une ligne ne doit contenir que 4 réponses max, s'il y en a plus on les met sur la ligne suivant.
    Les LinearLayoutSheets me permette d'afficher seulement les questions et réponses d'une feuille excel.

    Quelles sont les tailles de tes différentes boucle ? lstSheets.size(); lstQuestions.size(); lstReponse.size(); ...
    Les tailles sont différente en fonction du fichier choisit au début de l'application

    lstSheets de 1 à 12
    lstQuestions de 80 à 130
    lstReponses de 100 jusqu'a 250 voir un peu plus


    J'ai l'impression que tu génère énormément de layout , ce qui est très certainement inutile et remplacable par autre chose de plus efficace
    Tu n'as pas que l'impression c'est ce que je fais.
    Je veux bien connaitre l'autre chose ça m'intéresse.

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Au vu de l'interface en image pour moi c'est:

    Un relative-layout contenant:
    a- un bouton (align-top / align-left) avec du padding
    b- un bouton (align-top / align-right) avec du padding
    c- un drop-down (align-top / left of a, right of b)
    d- une list-view (align-bottom / below a)

    Chaque item de la list-view dépendant du type de question (on peut avoir un XML par type de question, la list-view permet de bien gérer ce cas).

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 5
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Chaque item de la list-view dépendant du type de question (on peut avoir un XML par type de question, la list-view permet de bien gérer ce cas).
    Les type de composant (RadioGroup, EditText ou Spinner) dépendent du nombre de choix pour la réponse.

    Si = 1 EditText (Num, date, normale)
    si < 3 alors RadioGroup comprenant le nombre de réponse en radioButton;
    si > 3 alors Spinner contenant les choix.

    Une question peut contenir 1 à n réponses.
    Une ligne de Réponse ne peux en contenir que 4 maximum, s'il y en a plus elle se mettent à la ligne suivante et ainsi de suite.

    Tout doit être générer dynamiquement, car les formulaire peuvent être modifiés à tout moment.

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Oui ça ne pose pas de probleme...

    L'Adapter gère très bien ce cas de figure:

    getViewTypeCount() => 3
    getViewType(int position): lookup de l'item à la position, et
    if answers = 1 => 0
    if answers <= 3 => 1
    if answers > 3 => 2

    getView(): si on n'a pas de "convertView", on crée un layout en fonction du type.
    sinon on re-utilise le convertView
    dans tous les cas, on met à jour la view avec les données entrées par l'utilisateur et/ou les éléments dynamiques

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 5
    Par défaut
    Je pense qu'il faut que je prenne en main la ListView que je n'ai jamais utilisé pour pouvoir comprendre correctement ce que tu essaies de m'expliquer.

Discussions similaires

  1. Méthode externe appelée dans un Swingworker
    Par JaroBx dans le forum EDT/SwingWorker
    Réponses: 2
    Dernier message: 14/07/2010, 11h31
  2. Réponses: 2
    Dernier message: 09/07/2010, 14h13
  3. [Débutant] [JSP] Appel de méthode
    Par Crazyblinkgirl dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 10/09/2004, 11h10
  4. [Kylix] pb d'appel de programme externe
    Par wizwiz dans le forum EDI
    Réponses: 2
    Dernier message: 27/08/2004, 09h29
  5. [Débutant] Héritage & appel de méthodes
    Par KooX dans le forum Langage
    Réponses: 4
    Dernier message: 11/05/2004, 23h37

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