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:
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; 
	} 
 
 
}
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
 
<?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>
Le fichier Drawable bg_element_list_guild_user:
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