Bonjour,
J'ai une ListView qui permet de sélectionner des lignes sans user de checkbox. J'ai donc créer une classe CheckRelativeLayout implémentant l'interface Checkable:
Je l'use dans mon adapteur avec ce fichier xml:
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 import android.content.Context; import android.util.AttributeSet; import android.widget.Checkable; import android.widget.RelativeLayout; public class CheckRelativeLayout extends RelativeLayout implements Checkable { private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked}; private boolean checked = false; public CheckRelativeLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public CheckRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); } public CheckRelativeLayout(Context context) { super(context); } @Override public boolean isChecked() { return checked; } @Override public void setChecked(boolean checked) { this.checked = checked; refreshDrawableState(); } @Override public void toggle() { this.checked = !this.checked; refreshDrawableState(); } @Override protected int[] onCreateDrawableState(int extraSpace) { int neededSpace = extraSpace; if (isChecked()) ++neededSpace; int[] drawableState = super.onCreateDrawableState(neededSpace); if (isChecked()) drawableState = mergeDrawableStates(drawableState, CHECKED_STATE_SET); return drawableState; } }
Le fichier Drawable bg_element_list_guild_user:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?xml version="1.0" encoding="utf-8"?> <CheckRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/bg_element_list_guild_user" android:orientation="horizontal" android:padding="@dimen/margin_small" > [...] </CheckRelativeLayout>
Code bg_element_list_guild_user : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Pressed couleur 1--> <item android:drawable="@drawable/template_bg_actionbar_new" android:state_pressed="true"/> <!-- Checked couleur 1--> <item android:drawable="@drawable/template_bg_actionbar_new" android:state_checked="true"/> <!-- Unchecked couleur 2--> <item android:drawable="@drawable/template_bg_actionbar_old" android:state_checked="false"/> </selector>
Quand je suis sur ICS tout marche impeccablement, dès que je clique sur une ligne elle change de couleur et prend l'état checked. Ce qui donne visuellement Couleur 1(pressed) => couleur 1(checked) tant que la ligne est sélectionnée.
Le problème vient dans les versions antérieur, je passe en état pressed puis rien puis checked. Ce qui donne Couleur 1(pressed ) => Couleur 2(ni pressed ni checked) => couleur 1(checked) tant que la ligne est sélectionnée.
J'ai essayé pas mal de configuration pour le fichier bg_element_list_guild_user mais rien n'y fait, j'ai toujours ce changement de couleur entre l'état pressed et checked.
Si vous avez des idées pour résoudre mon problème elles sont les bienvenues
Partager