Dans un ExpandableListView
Est-ce qu'il y a un moyen de cacher l'indicateur de groupe pour les groupes sans enfants ?
Je pense que cela va définir le groupIndicator pour tous les éléments et pas seulement ceux sans enfants.
Dans un ExpandableListView
Est-ce qu'il y a un moyen de cacher l'indicateur de groupe pour les groupes sans enfants ?
Je pense que cela va définir le groupIndicator pour tous les éléments et pas seulement ceux sans enfants.
Le site android:groupIndicator
prend un dessinateur dont l'état est activé. C'est-à-dire que vous pouvez définir une image différente pour différents états.
Lorsque le groupe n'a pas d'enfants, l'état correspondant est "state_empty".
Voir ces liens de référence :
Pour state_empty
vous pouvez définir une image différente qui ne prête pas à confusion, ou simplement utiliser une couleur transparente pour ne rien afficher...
Ajoutez cet élément dans votre tableau d'état avec d'autres....
<item android:state_empty="true" android:drawable="@android:color/transparent"/>
Ainsi, votre liste de statuts peut être comme ceci :
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_empty="true" android:drawable="@android:color/transparent"/>
<item android:state_expanded="true" android:drawable="@drawable/my_icon_max" />
<item android:drawable="@drawable/my_icon_min" />
</selector>
Si vous utilisez une ExpandableListActivity, vous pouvez définir l'indicateur de groupe dans onCreate comme suit :
getExpandableListView().setGroupIndicator(getResources().getDrawable(R.drawable.my_group_statelist));
J'ai testé que cela fonctionne.
Ne fonctionne pas : Testé sous Android 4.0.2 (ICS). Voir les autres réponses à cette question sur cette page. Il semble qu'Android considère le groupe non étendu comme vide. Il suffit de définir l'indicateur de groupe sur transparent, puis d'ajouter un imageView à votre ligne de groupe et, dans la méthode getGroupView de l'adaptateur, de le définir sur l'icône que vous souhaitez.
Ce code ne fonctionne pas pour moi non plus (testé sur Android 4.4). Le groupe non étendu est considéré comme vide (pas d'enfants) donc l'icône est définie en couleur/transparent.
Merci pour le code, mais cela ressemble à une blague : un code si complexe pour une tâche si simple ?
Sur la base de la réponse de StrayPointer et du code du blog, vous pouvez simplifier encore plus le code :
Dans votre xml, ajoutez ce qui suit à ExpandableListView :
android:groupIndicator="@android:color/transparent"
Ensuite, dans l'adaptateur, vous faites ce qui suit :
@Override
protected void bindGroupView(View view, Context paramContext, Cursor cursor, boolean paramBoolean){
**...**
if ( getChildrenCount( groupPosition ) == 0 ) {
indicator.setVisibility( View.INVISIBLE );
} else {
indicator.setVisibility( View.VISIBLE );
indicator.setImageResource( isExpanded ? R.drawable.list_group_expanded : R.drawable.list_group_closed );
}
}
En utilisant la méthode setImageResource, tout se fait en une seule ligne. Vous n'avez pas besoin des trois tableaux d'entiers dans votre adaptateur. Vous n'avez pas non plus besoin d'un sélecteur XML pour les états expanded et collapsed. Tout se fait via Java.
De plus, cette approche affiche également le bon indicateur lorsqu'un groupe est développé par défaut, ce qui ne fonctionne pas avec le code du blog.
Il est destiné à être utilisé dans le getGroupView()
de votre BaseExpandableListAdapter
mise en œuvre. Jetez un coup d'œil à ce qui suit exemple de mise en œuvre .
Comme indiqué dans une autre réponse, Android considère qu'un groupe de listes non développées est vide, l'icône n'est pas affichée même si le groupe a des enfants.
Ce lien a résolu le problème pour moi : http://mylifewithandroid.blogspot.com/2011/06/hiding-group-indicator-for-empty-groups.html
En gros, vous devez définir le dessinable par défaut comme transparent, déplacer le dessinable dans votre vue de groupe en tant qu'ImageView et basculer l'image dans votre adaptateur.
Dans votre code, il suffit d'utiliser le xml personnalisé pour la liste des groupes et d'y placer l'élément suivant ImageView pour GroupIndicator .
Et ajoutez les tableaux ci-dessous dans votre ExpandableListAdapter
private static final int[] EMPTY_STATE_SET = {};
private static final int[] GROUP_EXPANDED_STATE_SET = { android.R.attr.state_expanded };
private static final int[][] GROUP_STATE_SETS = { EMPTY_STATE_SET, // 0
GROUP_EXPANDED_STATE_SET // 1
};
également dans L'objet de l'ExpandableListAdapter est le suivant ajouter les mêmes choses que ci-dessous
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
{
if (convertView == null)
{
LayoutInflater infalInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.row_group_list, null);
}
//Image view which you put in row_group_list.xml
View ind = convertView.findViewById(R.id.iv_navigation);
if (ind != null)
{
ImageView indicator = (ImageView) ind;
if (getChildrenCount(groupPosition) == 0)
{
indicator.setVisibility(View.INVISIBLE);
}
else
{
indicator.setVisibility(View.VISIBLE);
int stateSetIndex = (isExpanded ? 1 : 0);
Drawable drawable = indicator.getDrawable();
drawable.setState(GROUP_STATE_SETS[stateSetIndex]);
}
}
return convertView;
}
Référence : http://mylifewithandroid.blogspot.in/2011/06/hiding-group-indicator-for-empty-groups.html
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Pour clarifier : existe-t-il un moyen de masquer l'indicateur de groupe UNIQUEMENT pour les groupes sans enfants ?