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();
	}