Suite à mon post précédent je rencontre un nouveau souçis.
J'ai donc une listView avec entre autre une progressBar pour chaque item.
Ma progress bar à un theme spécifique :
Avec un progressDrawable associé très classique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <style name="progressBarHDD" parent="@android:Widget.ProgressBar.Horizontal"> <item name="android:progressDrawable">@drawable/bg_hdd_progressbar</item> <item name="android:minHeight">10dp</item> <item name="android:maxHeight">10dp</item> </style>
J'ai également un autre drawable me permettant de changer la couleur de la progressBar :
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 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape> <corners android:radius="5dip" /> <stroke android:width="2dip" android:color="#ffa6a7a7" /> <gradient android:startColor="#ff353636" android:centerColor="#ff636363" android:centerY="0.75" android:endColor="#ffa6a7a7" android:angle="270" /> </shape> </item> <item android:id="@android:id/secondaryProgress"> <clip> <shape> <corners android:radius="5dip" /> <gradient android:startColor="#ff353636" android:centerColor="#ff636363" android:centerY="0.75" android:endColor="#ffa6a7a7" android:angle="270" /> </shape> </clip> </item> <item android:id="@android:id/progress"> <clip> <shape> <stroke android:width="1dip" android:color="#ff4a7b00" /> <corners android:radius="5dip" /> <gradient android:startColor="#ffc6f849" android:centerColor="#ffc2f648" android:centerY="0.75" android:endColor="#ff91d63f" android:angle="270" /> </shape> </clip> </item> </layer-list>
Pour peupler ma listView j'utilise un Adapter. Dans le getView de cet adapter deux solutions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/progress"> <shape> <stroke android:width="1dip" android:color="#ff7b0000" /> <corners android:radius="5dip" /> <gradient android:startColor="#fff10000" android:centerColor="#ffd10000" android:centerY="0.75" android:endColor="#ffad0000" android:angle="270" /> </shape> </item>
Soit je modifie uniquement la valeur du progress de ma progressbar soit je change également la couleur de la progressBar :
Tout marche très bien jusqu'au moment ou je dois scroller ma listView.
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 @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null) { convertView = inflater.inflate(R.layout.lv_etat_hdd, null); } DisqueDur hdd = this.items.get(position); if(hdd != null) { ProgressBar spaceGraph = (ProgressBar) convertView.findViewById(R.id.space_graph); //ProgressBar int progress = 0; if(hdd.getSpaceTotal() != 0) progress = (int) (100 - ((espaceDispoDbl*100) / espaceTotal)); spaceGraph.setProgress(progress); if(hdd.getSpace() < 1024 && hdd.getType() != DCDROM) spaceGraph.setProgressDrawable(this.ctx.getResources().getDrawable(R.drawable.bg_hdd_progressbar_error)); } return convertView; }
Si les progressBar n'ont pas été modifiée , pas de problème. En revanche si la couleur de la progressBar a été modifiée via setProgressDrawable dès que l'item de la listview sort de l'écran , la progressBar disparait (alors que les autres éléments sont toujours là. Celà ne se produit que avec l'utilisation de setProgressDrawable().
Une idée ?
Partager