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 :

Ajouter une valeur à une ListView


Sujet :

Composants graphiques Android

  1. #1
    Membre confirmé Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Par défaut Ajouter une valeur à une ListView
    Bonjour à tous,

    Dans mon application Android, j'ai une activité qui contient un bouton permettent de créer de nouveaux profils. Voilà le layout de l'activité :

    Fichier creation.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        <LinearLayout>
              <TextView/>
              <Button/>
              <ListView> <ListView/>
        </LinearLayout>
    La ListView contient la liste des profils créés.
    En cliquant sur le bouton (Button), une boite de dialogue se lance (AlertDialog), ayant ce layout :

    Fichier profil.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        <LinearLayout>
              <TextView/>
              <EditText/>
        </LinearLayout>
    Cette boite de dialogue permet de créer un nouveau profil. on valide en cliquant sur le bouton "Enregistrer" (PositiveButton) ou on annule en cliquant sur le bouton "Annuler" (NegativeButton).
    La validation devrait ajouter le profil créé à la ListView. C'est ici que mon problème se pose.

    Voilà le code de création :
    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
     
            private Button creation;
    	private Intent intent;
    	private ListView profilList, list;
    	private ArrayAdapter<String> listadapter;
    	private EditText edit;
    	private String[] values;
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
     
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.creation_profil);
     
    		edit = (EditText) findViewById(R.id.NameProfil);
     
    		creation = (Button) findViewById(R.id.creation);
    		creation.setOnClickListener(this);
     
     
    		list = creerListView();
    	}
     
    	@Override
    	public void onClick(View v) {
    		if (v == creation){
    			afficherBoiteProfil();
    		}
     
    	}
     
    	private ListView creerListView(){
    		profilList = (ListView) findViewById(R.id.profilList);
    		values = new ArrayList();
    		listadapter = new ArrayAdapter(this, 
    				android.R.layout.simple_list_item_1, android.R.id.text1, values);
    		profilList.setAdapter(listadapter);
    		profilList.setOnItemClickListener(new OnItemClickListener() {
     
    			@Override
    			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    					long arg3) {
    				// TODO Auto-generated method stub
     
    			}
     
    		});
    		return profilList;
    	}
     
    	private void afficherBoiteProfil(){
     
    		//On instancie notre layout en tant que View
    		LayoutInflater factory = LayoutInflater.from(this);
    		final View alertDialogView = factory.inflate(R.layout.creation, null);
     
     
    		//creation de l'alerteDialog
    		AlertDialog.Builder createProfilDialog = new     AlertDialog.Builder(this);
    		createProfilDialog.setView(alertDialogView);
    		createProfilDialog.setTitle("Création d'un profil");
    		createProfilDialog.setIcon(R.drawable.add_user32);
    		createProfilDialog.setPositiveButton("Enregistrer", 
    				new  DialogInterface.OnClickListener() {
     
    					@Override
    					public void onClick(DialogInterface dialog, int which) {
    						String value = edit.getText().toString();
    						listadapter.add(value);
    						intent = new Intent(getApplicationContext(), CreationProfil.class); 
    						startActivity(intent);
    					}
    				});
    		createProfilDialog.setNegativeButton("Annuler", null);
    		createProfilDialog.show();
    	}
    Le contenu de ma Liste est défini par le tableau de String "values".
    En cliquant sur le bouton "Enregistrer", l'application se plante!

    Merci d'avance pour votre aide.

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    Il nous faudrait le Logcat pour pouvoir t'aider. Il y a plusieurs erreurs possibles:
    - Ton activité n'est pas dans le manifest.
    - Tu n'as pas appelé notifyDataSetChanged sur l'adapter après avoir changé ses données.
    - etc..

  3. #3
    Membre confirmé Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Par défaut
    Salut,

    Merci pour la réponse.
    L'activité CreationProfil.java est bien déclarée dans le Manifest.

    - Tu n'as pas appelé notifyDataSetChanged sur l'adapter après avoir changé ses données.
    Aucune idée de cette méthode.

    Voilà le logcat :
    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
     
    09-25 09:35:29.529: E/AndroidRuntime(1117): 	at java.lang.reflect.Method.invokeNative(Native Method)
    09-25 09:35:29.529: E/AndroidRuntime(1117): 	at java.lang.reflect.Method.invoke(Method.java:521)
    09-25 09:35:29.529: E/AndroidRuntime(1117): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
    09-25 09:35:29.529: E/AndroidRuntime(1117): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
    09-25 09:35:29.529: E/AndroidRuntime(1117): 	at dalvik.system.NativeStart.main(Native Method)
    09-25 14:03:47.759: E/AndroidRuntime(1152): Uncaught handler: thread main exiting due to uncaught exception
    09-25 14:03:47.769: E/AndroidRuntime(1152): java.lang.NullPointerException
    09-25 14:03:47.769: E/AndroidRuntime(1152): 	at acsyo.work.testPsyTech.CreationProfil$2.onClick(CreationProfil.java:88)
    09-25 14:03:47.769: E/AndroidRuntime(1152): 	at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
    09-25 14:03:47.769: E/AndroidRuntime(1152): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    09-25 14:03:47.769: E/AndroidRuntime(1152): 	at android.os.Looper.loop(Looper.java:123)
    09-25 14:03:47.769: E/AndroidRuntime(1152): 	at android.app.ActivityThread.main(ActivityThread.java:3948)
    09-25 14:03:47.769: E/AndroidRuntime(1152): 	at java.lang.reflect.Method.invokeNative(Native Method)
    09-25 14:03:47.769: E/AndroidRuntime(1152): 	at java.lang.reflect.Method.invoke(Method.java:521)
    09-25 14:03:47.769: E/AndroidRuntime(1152): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
    09-25 14:03:47.769: E/AndroidRuntime(1152): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
    09-25 14:03:47.769: E/AndroidRuntime(1152): 	at dalvik.system.NativeStart.main(Native Method)
    J'attend votre réponse

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Je pense qu'il te manque ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    createProfilDialog.create();
    ou alors, un listener null est interdit à cet endroit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    createProfilDialog.setNegativeButton("Annuler", null);


    Par ailleurs, tu utilises un Builder, qui te permet de faciliter l'écriture du code, mais pas complètement.
    Normalement il te suffit de faire :
    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
     
    		new AlertDialog.Builder(this)
    		.setView(alertDialogView)
    		.setTitle("Création d'un profil")
    		.setIcon(R.drawable.add_user32)
    		.setPositiveButton("Enregistrer", 
    				new  DialogInterface.OnClickListener() {
     
    					@Override
    					public void onClick(DialogInterface dialog, int which) {
    						String value = edit.getText().toString();
    						listadapter.add(value);
    						intent = new Intent(getApplicationContext(), CreationProfil.class); 
    						startActivity(intent);
    					}
    				})
                     //etc
    		.create()
    		.show();

  5. #5
    Membre confirmé Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Par défaut
    Merci pour la réponse.

    Pour la méthode create(), j'ai vu que la boite de dialogue est bien créé sans appel à cette méthode. Il y a un problème que je vois pas quand je l'appelle pas ?!!

    un listener null est interdit à cet endroit :
    createProfilDialog.setNegativeButton("Annuler", null);
    Le bouton "Annuler" sert à fermer la boite de dialogue et retourner sur l'activité qui a ouvert cette boite de dialogue. Donc, j'ai vu qu'il est plus facile de mettre un listener null au lieu de créer un listener etc...
    Je veux comprendre pourquoi un listener null est interdit ?!

    Par ailleurs, tu utilises un Builder, qui te permet de faciliter l'écriture du code, mais pas complètement.
    Oui je sais que ça revient au même mais je préfère écrire chaque méthode en une ligne toute seule, je trouve que c'est plus lisible pour moi

    En attendant votre aide, je suis en train de voir des exemples sur la méthode notifyDataSetChanged().

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Citation Envoyé par JQueen Voir le message
    Je veux comprendre pourquoi un listener null est interdit ?!
    Ce n'était qu'une supposition, mais c'est pas forcément interdit (juste bizarre pour moi)

    Citation Envoyé par JQueen Voir le message
    Oui je sais que ça revient au même mais je préfère écrire chaque méthode en une ligne toute seule, je trouve que c'est plus lisible pour moi
    Mais dans mon exemple elles sont déjà toutes sur des lignes différentes. Enfin bref, à toi de voir
    Citation Envoyé par JQueen Voir le message
    En attendant votre aide, je suis en train de voir des exemples sur la méthode notifyDataSetChanged().
    Cette méthode ne sert qu'à rafraichir visuellement l'affichage lorsqu'un élément de la liste a changé.


    L'erreur vient tout simplement de la ligne 88 de la classe CreationProfil. Peux tu nous dire ce qu'il y a à cet endroit ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    Un listener null n'est pas interdit, c'est même une bonne chose pour ma part. Ça évite d'instancier un nouvel objet pour ceux qui font tout en inner-class.

    Concernant ton problème, tu as essayés de faire un un createProfilDialog.create().show() à la palce de createProfilDialog.show() ?

    Pour notifyDataSetChanged() c'est juste une fonction que tu dois impérativement appeler quand tu modifies les données dans ton adapter.
    Ici pour la fonction add de ArrayAdapter, la méthode est appelée en interne donc tu n'as pas besoins de la rappeler. Mais c'est toujours bon à savoir

    Edit: Simon a été plus rapide que moi

  8. #8
    Membre confirmé Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Par défaut
    L'erreur vient tout simplement de la ligne 88 de la classe CreationProfil. Peux tu nous dire ce qu'il y a à cet endroit ?
    A cette ligne, se trouve la premiére ligne de la méthode onClick :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String value = edit.getText().toString();
    Concernant ton problème, tu as essayés de faire un un createProfilDialog.create().show() à la palce de createProfilDialog.show() ?
    J'ai jamais utilisé la méthode create().

    Des idées ?

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    [quote=JQueen;6905195]A cette ligne, se trouve la premiére ligne de la méthode onClick :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String value = edit.getText().toString();
    [/CODE]
    Cela veut dire que ton objet edit est null... Qu'elle est l'identifiant de cet EditText ? Car dans ta méthode onCreate, tu le bind à R.id.NameProfil est-ce vraiment le bon ?

    Citation Envoyé par JQueen Voir le message
    J'ai jamais utilisé la méthode create().
    Oups, je voulais dire le contraire (il faut d'abord créer l'AlertDialog avant de l'afficher).
    Donc c'est bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    createProfilDialog.create().show()

  10. #10
    Membre confirmé Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Par défaut
    Cela veut dire que ton objet edit est null...
    Comment ça null ? je ne voit pas ce que tu veux dire ?

    Qu'elle est l'identifiant de cet EditText ? Car dans ta méthode onCreate, tu le bind à R.id.NameProfil est-ce vraiment le bon ?
    L'Edittext est bien créé dans le fichier xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <EditText 
        	android:id="@+id/NameProfil"
        	android:layout_width="fill_parent"
        	android:layout_height="wrap_content"
        	android:layout_below="@id/textProfil"  
        />
    Et dans l'activité , il est bien initialisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private EditText edit;
    ...
    edit = (EditText) findViewById(R.id.NameProfil);
    Il y a un truc qui ne va pas dans ces lignes ?

    J'attend vos réponses

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Null veut simplement dire que l'objet n'existe pas. La variable n'est liée à (pointe vers) aucun objet. Il se produit donc un NullPointerException (Erreur due à un pointeur invalide).

    Essaie de clean le projet (Menu->Project->Clean...) relance le projet sur ton smartphone et recopie nous l'erreur complète (car là il en manque un bout)

  12. #12
    Membre confirmé Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Par défaut
    J'ai fait un clean du projet et je l'ai reéxécuté.

    Voilà le logcat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    09-25 15:58:56.018: E/AndroidRuntime(1322): Uncaught handler: thread main exiting due to uncaught exception
    09-25 15:58:56.028: E/AndroidRuntime(1322): java.lang.NullPointerException
    09-25 15:58:56.028: E/AndroidRuntime(1322): 	at acsyo.work.testPsyTech.CreationProfil$2.onClick(CreationProfil.java:87)
    09-25 15:58:56.028: E/AndroidRuntime(1322): 	at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
    09-25 15:58:56.028: E/AndroidRuntime(1322): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    09-25 15:58:56.028: E/AndroidRuntime(1322): 	at android.os.Looper.loop(Looper.java:123)
    09-25 15:58:56.028: E/AndroidRuntime(1322): 	at android.app.ActivityThread.main(ActivityThread.java:3948)
    09-25 15:58:56.028: E/AndroidRuntime(1322): 	at java.lang.reflect.Method.invokeNative(Native Method)
    09-25 15:58:56.028: E/AndroidRuntime(1322): 	at java.lang.reflect.Method.invoke(Method.java:521)
    09-25 15:58:56.028: E/AndroidRuntime(1322): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
    09-25 15:58:56.028: E/AndroidRuntime(1322): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
    09-25 15:58:56.028: E/AndroidRuntime(1322): 	at dalvik.system.NativeStart.main(Native Method)

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    La ligne 87 de la classe CreationProfil correspond toujours à String value = edit.getText().toString(); ?

  14. #14
    Membre confirmé Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Par défaut
    La ligne 87 est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    value = edit.getText().toString();
    où value est déclaré comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private String value;

  15. #15
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Le NullPointerException ne vient pas de l'affectation en elle même.
    String s = null; est correct.
    Le problème vient donc de soit :
    - edit qui est null
    - edit.getText() qui est null

  16. #16
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Tu as ce type d'erreur, NullPointerException, lorsque tu tentes d'invoquer une méthode sur une variable contenant quelque chose de non-initialisée (comprendre par là : "qui vaut null", histoire de pallier à "mais il est initialisé, il est mis à null").

    À la déclaration de la variable, elle est "remplie" automatiquement avec la valeur null (=> vide). En Java, le choix a été de ne pas pouvoir invoquer de méthode sur un null, d'où l'erreur.

    C'est une erreur généralement assez simple a corriger, il suffit juste de traquer la variable qui n'a pas été correctement initialisée, tâche facilitée par le stacktrace très verbeux.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  17. #17
    Membre confirmé Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Par défaut
    Bonjour,

    J'ai effectué ce matin un déboggage simple de mon code, en utilisant de petits Log.i()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void onClick(DialogInterface dialog, int which) {
    						if(edit != null){
    							Log.i("PsythecProjet", "l'edit n'est pas vide");
    							value = edit.getText().toString();
    							values.add(value);
    							listadapter.notifyDataSetChanged();
    							intent = new Intent(getApplicationContext(), CreationProfil.class); 
    							startActivity(intent);
    						}
    						Log.i("PsythecProjet", "l'edit est vide");
    					}
    L'idée est de savoir si l'edit est null ou pas.

    En examinant le logcat, après exécution du projet, voilà le résultat :
    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
     
    09-26 09:42:58.348: D/AndroidRuntime(728): Shutting down VM
    09-26 09:42:58.348: W/dalvikvm(728): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)
    09-26 09:42:58.359: E/AndroidRuntime(728): Uncaught handler: thread main exiting due to uncaught exception
    09-26 09:42:58.359: E/AndroidRuntime(728): java.lang.NullPointerException
    09-26 09:42:58.359: E/AndroidRuntime(728): 	at acsyo.work.testPsyTech.CreationProfil$2.onClick(CreationProfil.java:87)
    09-26 09:42:58.359: E/AndroidRuntime(728): 	at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
    09-26 09:42:58.359: E/AndroidRuntime(728): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    09-26 09:42:58.359: E/AndroidRuntime(728): 	at android.os.Looper.loop(Looper.java:123)
    09-26 09:42:58.359: E/AndroidRuntime(728): 	at android.app.ActivityThread.main(ActivityThread.java:3948)
    09-26 09:42:58.359: E/AndroidRuntime(728): 	at java.lang.reflect.Method.invokeNative(Native Method)
    09-26 09:42:58.359: E/AndroidRuntime(728): 	at java.lang.reflect.Method.invoke(Method.java:521)
    09-26 09:42:58.359: E/AndroidRuntime(728): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
    09-26 09:42:58.359: E/AndroidRuntime(728): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
    09-26 09:42:58.359: E/AndroidRuntime(728): 	at dalvik.system.NativeStart.main(Native Method)
    09-26 09:42:58.379: I/dalvikvm(728): threadid=7: reacting to signal 3
    09-26 09:42:58.439: I/dalvikvm(728): Wrote stack trace to '/data/anr/traces.txt'
    09-26 09:43:00.749: I/Process(728): Sending signal. PID: 728 SIG: 9
    09-26 09:49:31.328: W/KeyCharacterMap(764): No keyboard for id 0
    09-26 09:49:31.328: W/KeyCharacterMap(764): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
    09-26 09:49:33.738: I/PsythecProjet(764): l'edit est vide
    09-26 09:51:29.558: I/PsythecProjet(764): l'edit est vide
    Donc l'edit est null. Pourquoi ?!!!

  18. #18
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Je ne vois qu'une seule solution :

    Il n'existe pas d'objet EditText référencé avec l'identifiant NameProfil dans le layout creation_profil.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    setContentView(R.layout.creation_profil);
    edit = (EditText) findViewById(R.id.NameProfil);

  19. #19
    Membre confirmé Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Par défaut
    Merci beaucoup Simon

    Il n'existe pas d'objet EditText référencé avec l'identifiant NameProfil dans le layout creation_profil.xml
    En fait, j'ai pas mentionné que le layout de l'alertDialog est définit par un autre fichier xml (creation.xml). L'erreur que j'ai faite est que j'ai défini l'EditText en utilisant la classe CreationProfil.java. Ce que j'ai dû faire c'est de le définir en utilisant la vue de la boite de dialogue.

    Voilà le code au début :
    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
    @Override
    	protected void onCreate(Bundle savedInstanceState) {
     
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.creation_profil);
     
    		edit = (EditText) findViewById(R.id.NameProfil);
     
    		creation = (Button) findViewById(R.id.creation);
    		creation.setOnClickListener(this);
     
     
    		list = creerListView();
    	}
     
    	@Override
    	public void onClick(View v) {
    		if (v == creation){
    			afficherBoiteProfil();
    		}
     
    	}
     
    	private ListView creerListView(){
    		profilList = (ListView) findViewById(R.id.profilList);
    		values = new ArrayList();
    		listadapter = new ArrayAdapter(this, 
    				android.R.layout.simple_list_item_1, android.R.id.text1, values);
    		profilList.setAdapter(listadapter);
    		profilList.setOnItemClickListener(new OnItemClickListener() {
     
    			@Override
    			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    					long arg3) {
    				// TODO Auto-generated method stub
     
    			}
     
    		});
    		return profilList;
    	}
     
    	private void afficherBoiteProfil(){
     
    		//On instancie notre layout en tant que View
    		LayoutInflater factory = LayoutInflater.from(this);
    		final View alertDialogView = factory.inflate(R.layout.creation, null);
     
     
    		//creation de l'alerteDialog
    		AlertDialog.Builder createProfilDialog = new     AlertDialog.Builder(this);
    		createProfilDialog.setView(alertDialogView);
    		createProfilDialog.setTitle("Création d'un profil");
    		createProfilDialog.setIcon(R.drawable.add_user32);
    		createProfilDialog.setPositiveButton("Enregistrer", 
    				new  DialogInterface.OnClickListener() {
     
    					@Override
    					public void onClick(DialogInterface dialog, int which) {
    						String value = edit.getText().toString();
    						listadapter.add(value);
    						intent = new Intent(getApplicationContext(), CreationProfil.class); 
    						startActivity(intent);
    					}
    				});
    		createProfilDialog.setNegativeButton("Annuler", null);
    		createProfilDialog.show();
    	}
    Voilà le code corrigé :
    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
    private void afficherBoiteProfil(){
    		
    		//On instancie notre layout en tant que View
    		LayoutInflater factory = LayoutInflater.from(this);
    		final View alertDialogView = factory.inflate(R.layout.creation, null);
    		//creation de l'alerteDialog
    		AlertDialog.Builder createProfilDialog = new AlertDialog.Builder(this);
    		edit = (EditText) alertDialogView.findViewById(R.id.NameProfil);
    		createProfilDialog.setView(alertDialogView);
    		createProfilDialog.setTitle("Création d'un profil");
    		createProfilDialog.setIcon(R.drawable.add_user32);
    		createProfilDialog.setPositiveButton("Enregistrer", 
    				new  DialogInterface.OnClickListener() {
    					@Override
    					public void onClick(DialogInterface dialog, int which) {
    						if(edit != null){
    							Log.i("PsythecProjet", "l'edit n'est pas vide");
    							value = edit.getText().toString();
    							values.add(value);
    							listadapter.notifyDataSetChanged();
    						}
    						Log.i("PsythecProjet", "l'edit est vide");
    					}
    				});
    		createProfilDialog.setNegativeButton("Annuler", null);
    		createProfilDialog.create();
    		createProfilDialog.show();
    	}
    Le code est testé et il est bien fonctionnel. J'espère que celà aidera d'autres personnes

    Merci beaucoup pour vos aides

  20. #20
    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
    Encore une raison pour laquelle je n'utilise jamais de boite de dialogues

    (sauf pour les confirmations oui/non de l'utilisateur bien sur)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/01/2008, 14h44
  2. ajouter des valeurs à une liste déroulante
    Par Simon2 dans le forum IHM
    Réponses: 3
    Dernier message: 30/07/2007, 23h59
  3. Réponses: 6
    Dernier message: 21/04/2007, 02h11
  4. Réponses: 1
    Dernier message: 25/09/2006, 17h15
  5. Ajout d'une valeur à une liste
    Par NicoNGRI dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/01/2005, 12h34

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