Problème de sélection dans une ListView
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:
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:
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:
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 :ccool: