Progressbar setProgressDrawable et ListView
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:
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:
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:
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:
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 ?