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 :

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>
Avec un progressDrawable associé très classique :
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>
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
<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>
Pour peupler ma listView j'utilise un Adapter. Dans le getView de cet adapter deux solutions.
Soit je modifie uniquement la valeur du progress de ma progressbar soit je change également 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
@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;
}
Tout marche très bien jusqu'au moment ou je dois scroller ma listView.
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 ?