Le titre n'est peut-être pas trés clair, mais j'ai une appli qui contient une listView que j'ai créé directement en java comme ceci :
Et j'ai crée un menu comportant un onglet "filtres" qui renvoie vers un sousmenu dont voici 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 public static ArrayList<ListAlarme> getAListOfAlarms() { ArrayList<ListAlarme> listAl = new ArrayList<ListAlarme>(); listAl.add(new ListAlarme("alarme1 ", "type1 ","SMS", defaut)); listAl.add(new ListAlarme("alarme2 ", "type2 ","ESD", grave)); listAl.add(new ListAlarme("alarme3 ", "type3 ","MAS", grave)); listAl.add(new ListAlarme("alarme4 ", "type4 ","SMS", defaut)); listAl.add(new ListAlarme("alarme5 ", "type5 ","ESD", defaut)); listAl.add(new ListAlarme("alarme6 ", "type6 ","MAS", grave)); listAl.add(new ListAlarme("alarme7 ", "type7 ","SMS", defaut)); listAl.add(new ListAlarme("alarme8 ", "type8 ","MAS", grave)); listAl.add(new ListAlarme("alarme9 ", "type9 ","ESD", grave)); listAl.add(new ListAlarme("alarme10", "type10","SMS", defaut)); listAl.add(new ListAlarme("alarme11", "type11","ESD", grave)); listAl.add(new ListAlarme("alarme12", "type12","SMS", grave)); listAl.add(new ListAlarme("alarme13", "type13","MAS", defaut)); listAl.add(new ListAlarme("alarme14", "type14","SMS", grave)); return listAl;
Comme on le voit dans les partie commentées de ce code j'ai essayé d'utiliser setTextFilter et getTextFilter mais sans succés.
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 /**----Choix du Filtre----*/ case R.id.filter: break; case R.id.ESDfilter: Toast.makeText(this, "ESD filter choosed", Toast.LENGTH_LONG).show(); list = (ListView)findViewById(R.id.listalarme); // adapter = (AlarmeAdapter)list.getAdapter(); list.setTextFilterEnabled(true); // list.setFilterText("ESD"); list.getTextFilter(); // adapter.notifyDataSetChanged(); break; case R.id.SMSfilter: Toast.makeText(this, "SMS filter choosed", Toast.LENGTH_LONG).show(); break; case R.id.MASfilter: Toast.makeText(this, "MAS filter choosed", Toast.LENGTH_LONG).show(); break; case R.id.defaultfilter: Toast.makeText(this, "Default filter choosed", Toast.LENGTH_LONG).show(); list = (ListView)findViewById(R.id.listalarme); adapter = (AlarmeAdapter)list.getAdapter(); filtredefaut = false; adapter.notifyDataSetChanged(); break; case R.id.gravefilter: Toast.makeText(this, "Grave filter choosed", Toast.LENGTH_LONG).show(); break;
Aprés quelques recherches j'ai trouvé ce tuto qui est trés bien expliqué, mais je ne réussis pas à l'adapter à mon appli, ma liste étant plus compexe que celle créer dans le tuto.
J'aimerais donc un peu d'aide et de conseils pour savoir comme réussir à n'afficher, par exemple, que les alarmes de type SMS lorsque je clique sur "filter SMS" de mon sousmenu.
Il faut aussi savoir que dans cette appli je passe pas un adapter pour implémenter et modifier mon layout, au cas où voici le code de mon adapter
Comme vous le voyez j'avais essayé de faire passer une variable qui affiche ou non les lignes de la listView mais cela n'a pas marché.
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 public class AlarmeAdapter extends BaseAdapter{ private List<ListAlarme> mListA; public int j; public static int etat; public final static int ACKKED = 1; public final static int NO_ACKKED = 0; public ImageButton ackbutton; private Context mContext; private LayoutInflater mInflater; public AlarmeAdapter(Context context, List<ListAlarme> aListA, int state) { mContext = context; mListA = aListA; mInflater = LayoutInflater.from(mContext); etat = state; } public int getCount() { return mListA.size(); } public Object getItem(int position) { return mListA.get(position); } public long getItemId(int position) { return position; } /**-----Début getView---------*/ public View getView(final int position, View convertView, ViewGroup parent) { LinearLayout layoutItem; if (convertView == null) { layoutItem = (LinearLayout) mInflater.inflate(R.layout.alarme_layout, parent, false); } else { layoutItem = (LinearLayout) convertView; } TextView alarmeID = (TextView)layoutItem.findViewById(R.id.alarme_id); TextView alarmeType = (TextView)layoutItem.findViewById(R.id.alarme_type); TextView alarmeGrp = (TextView)layoutItem.findViewById(R.id.alarme_groupe); ackbutton = (ImageButton)layoutItem.findViewById(R.id.ackbutton); alarmeID.setText(mListA.get(position).idAlarme); alarmeType.setText(mListA.get(position).typeAlarme); alarmeGrp.setText(mListA.get(position).grpAlarme); ListAlarme itemgenre = mListA.get(position); if (itemgenre.genre == ListAlarme.grave){ layoutItem.setBackgroundColor(Color.RED); } else { if (ManagementAlarm.filtredefaut == true){ layoutItem.removeViewAt(ListAlarme.defaut); }else { layoutItem.setBackgroundColor(Color.YELLOW); } } layoutItem.setTag(position); layoutItem.setOnLongClickListener(new OnLongClickListener(){ @Override public boolean onLongClick(View v) { ManagementAlarm.longClick = true; Integer position = (Integer)v.getTag(); sendListener(mListA.get(position), position); return true; } }); layoutItem.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { sendListener(mListA.get(position), position); } }); if (ManagementAlarm.varack[position] == 1){ ackbutton.setVisibility(4); } else { ackbutton.setVisibility(0); } ackbutton.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { if(ManagementAlarm.varack[position] == 0){ Toast.makeText(mContext, "the alarm : "+ManagementAlarm.listP.get(position).idAlarme+" is ack", Toast.LENGTH_LONG).show(); v.setVisibility(4); ManagementAlarm.varack[position] = 1; } else{ Toast.makeText(mContext, "you have already ack "+ManagementAlarm.listP.get(position).idAlarme, Toast.LENGTH_LONG).show(); } } }); return layoutItem; } /**-----Fin getView---------*/ private ArrayList<AlarmeAdapterListener> myListListener = new ArrayList<AlarmeAdapterListener>(); public void addListener(AlarmeAdapterListener aListener) { myListListener.add(aListener); } private void sendListener(ListAlarme item, int position) { for(int i = myListListener.size()-1; i >= 0; i--) { if (ManagementAlarm.longClick == true){ myListListener.get(i).OnLongClick(item, position); } else { myListListener.get(i).OnClick(item, position); } } } public interface AlarmeAdapterListener { public boolean OnLongClick(ListAlarme item, int position); public void OnClick(ListAlarme item, int position); } public void setEtat (int nvetat) { etat = nvetat; } }
Donc aprés avoir tester quelques solutions je viens vers vous pour savoir quelle serait la solution la plus efficace, et surtout qui marcherait avec ma liste.
Merci d'avance
Partager