Bonjour.
Voici mon problème.
Dans une activité de mon application android, j'ai une listeView avec une CheckBox pour chaque item. Dans le genre :
====================
TexteView CheckBox
====================
Je souhaite que l'utilisateur puisse sélectionner des items en cochant la CheckBox puis les supprimer en appuyant sur le bouton du menu (HW ou SW). Exactement comme pour une boite mail, on sélectionne plusieurs message et ensuite en clique sur un bouton supprimer.
Dans l'idée j'aimerai parcourir la liste des items et via une condition "if", gérer la suppression des items. Dans le genre :
Dans l'algo c'est simple. Mais étant débutant en JAVA (J'ai appris la POO en C++), le codage s'avère plus fastidieux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Pour (i=0 à i<Fin de la liste ; i++) Si (item(i).checkbox=true) Supprimer item Fin si Fin pour
Ce que je n'arrive pas a faire c'est faire correspondre la CheckBox à l'item correspondant, ou du moins parcourir ma liste avec un curseur (ici i).
Voici ma classe correspondant a mon activité. En bas se trouve une seconde classe pour la gestion du menu, c'est à l’intérieur de celle-ci que j'aimerai implémenter ma fonction.
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 public class ticketDeleteActivity extends Activity { //===================Création du Menu (Appui sur le bouton)======================= private Menu m = null; @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); //R.menu.menu est l'id de notre menu inflater.inflate(R.menu.menu_delete, menu); m = menu; return true; } //===================Affichage de la liste des tickets========================== public final static String ITEM_TITLE = "title"; public final static String ITEM_CAPTION1 = "caption"; public final static String ITEM_CAPTION2 = "caption"; public Map<String,?> createItem(String title, String caption1) { Map<String,String> item = new HashMap<String,String>(); item.put(ITEM_TITLE, title); item.put(ITEM_CAPTION1, caption1); return item; } ListView listView ; int incTicket; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ticket_consultation); //Creation d'une instance de la classe TicketBDD TicketBDD ticketBDD = new TicketBDD(ticketDeleteActivity.this); //Déclaration de la variable security pour l'affichage des tickets List<Map<String,?>> security = new LinkedList<Map<String,?>>(); //Ouverture de la BDD ticketBDD.open(); for(incTicket=1;incTicket<500;incTicket++){ //Récupération du ticket en foncrtion du nom Ticket ticketFromBdd = ticketBDD.getTicketWithId(incTicket); if(ticketFromBdd != null){ //Récupération en variable des différents paramètres du ticket (ID, nom, description) String idProject = ticketFromBdd.getIdProject(); String idTicket = ticketFromBdd.getidTickettType(); String name = ticketFromBdd.getName(); String description = ticketFromBdd.getDescription(); //Affichage des tickets security.add(createItem("TICKET N°"+incTicket, "ID Ticket : "+String.valueOf(idTicket)+ "\nN° Projet : "+String.valueOf(idProject)+ "\nNom : " +name+ "\nDescription : " +description)); } } // create our list and custom adapter SeparatedListAdapter adapter = new SeparatedListAdapter(this); //adapter.addSection("Array test", new ArrayAdapter<String>(this, // R.layout.list_item, new String[] { "First item", "Item two" })); adapter.addSection("Liste des tickets", new SimpleAdapter(this, security, R.layout.list_complex_with_checkbox, new String[] { ITEM_TITLE, ITEM_CAPTION1 }, new int[] { R.id.list_complex_title, R.id.list_complex_caption1 })); ListView list = new ListView(this); list.setAdapter(adapter); this.setContentView(list); //Fermeture de la BDD ticketBDD.close(); } //===========================Suppression des tickets============================ @Override public boolean onOptionsItemSelected(MenuItem item) { int i; //Creation d'une instance de la classe TicketBDD TicketBDD ticketBDD = new TicketBDD(ticketDeleteActivity.this); //Ouverture de la BDD ticketBDD.open(); switch (item.getItemId()) { case R.id.bouton_menu_delete: for(i=1;i<10;i++){ CheckBox cb = (CheckBox)findViewById(R.id.checkbox_ticket); if (cb.isChecked()){ Toast.makeText(getApplicationContext(), "cb selected : ", Toast.LENGTH_LONG) .show(); } } Toast.makeText(getApplicationContext(), "Tickets supprimés ", Toast.LENGTH_LONG) .show(); return true; default: return super.onOptionsItemSelected(item); } } }
Si besoin voici mon adaptateur. Je l'ai trouvé sur internet puis je l'ai adapté, mais je ne connais pas le rôle précis de toute ses méthodes. J'ai lu qu'il était utilisé pour l'affichage et donc ne serais pas adapté à mon cas de situation.
Au final, j'arrive juste a vérifier que la première CB est cochée ou non. Comment puis-je faire pour parcourir ma liste ?
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 public class SeparatedListAdapter extends BaseAdapter { public final Map<String,Adapter> sections = new LinkedHashMap<String,Adapter>(); public final ArrayAdapter<String> headers; public final static int TYPE_SECTION_HEADER = 0; public SeparatedListAdapter(Context context) { headers = new ArrayAdapter<String>(context, R.layout.list_header); } public void addSection(String section, Adapter adapter) { this.headers.add(section); this.sections.put(section, adapter); } public Object getItem(int position) { for(Object section : this.sections.keySet()) { Adapter adapter = sections.get(section); int size = adapter.getCount() + 1; // check if position inside this section if(position == 0) return section; if(position < size) return adapter.getItem(position - 1); // otherwise jump into next section position -= size; } return null; } public int getCount() { // total together all sections, plus one for each section header int total = 0; for(Adapter adapter : this.sections.values()) total += adapter.getCount() + 1; return total; } public int getViewTypeCount() { // assume that headers count as one, then total all sections int total = 1; for(Adapter adapter : this.sections.values()) total += adapter.getViewTypeCount(); return total; } public int getItemViewType(int position) { int type = 1; for(Object section : this.sections.keySet()) { Adapter adapter = sections.get(section); int size = adapter.getCount() + 1; // check if position inside this section if(position == 0) return TYPE_SECTION_HEADER; if(position < size) return type + adapter.getItemViewType(position - 1); // otherwise jump into next section position -= size; type += adapter.getViewTypeCount(); } return -1; } public boolean areAllItemsSelectable() { return false; } public boolean isEnabled(int position) { return (getItemViewType(position) != TYPE_SECTION_HEADER); } static class ViewHolder { protected TextView text; protected CheckBox checkbox; } @Override public View getView(int position, View convertView, ViewGroup parent) { int sectionnum = 0; for(Object section : this.sections.keySet()) { Adapter adapter = sections.get(section); int size = adapter.getCount() + 1; // check if position inside this section if(position == 0) return headers.getView(sectionnum, convertView, parent); if(position < size) return adapter.getView(position - 1, convertView, parent); // otherwise jump into next section position -= size; sectionnum++; } return null; } @Override public long getItemId(int position) { return position; } }
J'ai pourtant fait des recherches sur internet, mais je n'ai pas trouvé de situation ou la suppression se fait via un bouton dans le menu.
Je vous remercie d'avance pour votre aide.
Partager