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 :

ListView dans une boite de dialogue qui ne se met pas à jour


Sujet :

Composants graphiques Android

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 211
    Points : 102
    Points
    102
    Par défaut ListView dans une boite de dialogue qui ne se met pas à jour
    Bonjour,

    J'ai une boite de dialogue dans laquelle il y a une listView et deux boutons qui permettent d'ajouter et de supprimer des items dans la listView.

    Quand on clic sur le bouton ajouter, cela ouvre une autre boite de dialogue avec juste un EditText. En validant cela doit rajouter le texte rentré dans la listView et fermer donc la 2nde semaine boite de dialogue.

    J'ai 2 problèmes :
    - La liste n'est pas mise à jour (mais j'appelle pourtant bien le notifyDataSetChanged()) mais le texte rentré dans l'EditText est bien ajouté car lorsque je relance la première boite de dialogue, il apparait bien.
    - Le clavier qui apparaît lorsqu'on rajoute un item dans la 2nde boite de dialogue dans l'EditText, il ne disparait pas après validation de la 2nde boite de dialogue.

    Une idée de mon problème ?

    Je vous met le code :

    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
    private void displayTrainStationDialog() {
    		Builder dialog = new AlertDialog.Builder(this, AlertDialog.THEME_TRADITIONAL);
     
    		LayoutInflater inflater = LayoutInflater.from(this);
     
    		final View trainStationDialog = inflater.inflate(R.layout.train_station_management, null);
    		final ListView trainStationListView = (ListView) trainStationDialog.findViewById(R.id.trainStationListView);
     
    		final Set<String> trainStationSet = CommonHelper.loadTrainStationPrefs(AdministrationActivity.this);
     
    		final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, new ArrayList<String>(
    				trainStationSet));
    		trainStationListView.setAdapter(adapter);
    		trainStationListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
     
    		Button addButton = (Button) trainStationDialog.findViewById(R.id.addTrainStationButton);
    		Button deleteButton = (Button) trainStationDialog.findViewById(R.id.deleteTrainStationButton);
     
    		addButton.setOnClickListener(new OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				addTrainStationDialog(trainStationSet, adapter);
    				adapter.notifyDataSetChanged();
    			}
    		});
     
    		deleteButton.setOnClickListener(new OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				SparseBooleanArray selectedItems = trainStationListView.getCheckedItemPositions();
    				for (int i = 0; i < selectedItems.size(); i++) {
    					if (selectedItems.valueAt(i) == true) {
    						trainStationSet.remove(trainStationListView.getItemAtPosition(selectedItems.keyAt(i)));
    						adapter.notifyDataSetChanged();
    					}
    				}
    			}
    		});
     
    		dialog.setPositiveButton(getResources().getString(R.string.validate), new DialogInterface.OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				CommonHelper.saveTrainStationPrefs(AdministrationActivity.this, trainStationSet);
    			}
    		});
    		dialog.setNegativeButton(getResources().getString(R.string.cancel), null);
    		dialog.setView(trainStationDialog);
    		dialog.show();
    	}
     
    	private void addTrainStationDialog(final Set<String> trainStationSet, final ArrayAdapter<String> adapter) {
    		Builder dialog = new AlertDialog.Builder(this, AlertDialog.THEME_TRADITIONAL);
    		dialog.setTitle("Ajouter une gare");
     
    		final EditText textView = new EditText(dialog.getContext());
     
    		// Ajout listener sur le bouton Valider
    		dialog.setPositiveButton(getResources().getString(R.string.validate), new DialogInterface.OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				if (!trainStationSet.contains(textView.getText().toString())) {
    					trainStationSet.add(textView.getText().toString());
    					adapter.notifyDataSetChanged();
    				}
    			}
    		});
    		// Listener pour utiliser la touche Entrée
    		dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
    			@Override
    			public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
    				if (keyCode == KeyEvent.KEYCODE_ENTER) {
    					if (!trainStationSet.contains(textView.getText().toString())) {
    						trainStationSet.add(textView.getText().toString());
    						adapter.notifyDataSetChanged();
    					}
    					dialog.dismiss();
    					return true;
    				} else {
    					return false;
    				}
    			}
    		});
    		dialog.setNegativeButton(getResources().getString(R.string.cancel), null);
    		dialog.setView(textView);
    		dialog.show();
    	}

  2. #2
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 593
    Points : 18 498
    Points
    18 498
    Keith Flint 1969 - 2019

  3. #3
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 211
    Points : 102
    Points
    102
    Par défaut
    Bonjour thierrybenji,

    J'ai déjà lu ce topic mais je ne comprends pas trop en quoi cela peut m'aider ?

    J'appelle depuis mon activity une dialogue qui en appelle une autre. Et c'est dans cette 1ère dialogue qu'il y a mon listView donc il n'est pas question d'activityresult là dedans si je ne me trompe pas non ?

  4. #4
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 593
    Points : 18 498
    Points
    18 498
    Par défaut
    Ce n'est pas une question d'ActivityResult.

    En fait il faudrait que dans ta classe qu'extends BaseAdapter, il y ait une méthode qui ajoute à l'ArrayList et qui NotifySetDataChanged(), mais chez toi ça ne fonctionne pas comme ça.

    Je pense que le problème vient du fait que quand tu créer l'adapter tu mets ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new ArrayList <String> ( trainStationSet)
    Il faudrait que l'adapter soit créé directement avec une ArrayList, ensuite t'ajoute un élément dans cette liste, puis tu NotifyDataSetChanged().
    Keith Flint 1969 - 2019

  5. #5
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 211
    Points : 102
    Points
    102
    Par défaut
    Super ! Merci c'était bien ça le problème !


    Bonne journée

  6. #6
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 211
    Points : 102
    Points
    102
    Par défaut
    Par contre pour le 2ème problème, as-tu une idée ?

Discussions similaires

  1. Comment recuperer les info d'un formulaire dans une boite de dialogue
    Par frutix dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/05/2006, 11h42
  2. [VB]Afficher une liste dans une boite de dialogue
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 05/04/2006, 11h30
  3. Caractères spéciaux dans une boite de dialogue
    Par Rafiki dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 09/03/2006, 14h05
  4. [MFC] Dessin dans une boite de dialogue .
    Par Platypus dans le forum MFC
    Réponses: 8
    Dernier message: 21/07/2005, 11h21
  5. afficher dans une boite de dialogue la valeur d'une variable
    Par micknic dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/07/2005, 09h25

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