In un , c'è un modo per nascondere l'indicatore di gruppo per i gruppi senza figli?ExpandableListView - nascondi l'indicatore per i gruppi senza figli
risposta
La proprietà android:groupIndicator
accetta un disegno abilitato. Cioè, puoi impostare immagini diverse per stati diversi.
Quando il gruppo non ha figli, lo stato corrispondente è 'state_empty'
Vedi questi link di riferimento:
Per state_empty
, è possibile impostare un'immagine diversa che non è confondere, o, semplicemente, usare il colore trasparente per visualizzare nulla ...
Aggiungi questo articolo nel tuo stato drawable insieme ad altri ....
<item android:state_empty="true" android:drawable="@android:color/transparent"/>
Così, il vostro statelist può essere come questo:
<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>
Nel caso in cui si utilizza un ExpandableListActivity, è possibile impostare la groupindicator in onCreate come segue:
getExpandableListView().setGroupIndicator(getResources().getDrawable(R.drawable.my_group_statelist));
ho testato questo per funzionare.
Non funziona: testato su Android 4.0.2 (ICS). Vedi altre risposte a questa domanda in questa pagina. Sembra che Android consideri il gruppo non espanso come vuoto. Basta impostare l'indicatore di gruppo su trasparente, quindi aggiungere un imageView alla riga del gruppo e nel metodo getGroupView dell'adattatore, impostarlo sull'icona desiderata. – Fraggle
@Fraggle: quando ho provato su 2.2, ha funzionato. –
non funziona per me né su 2.2 – morgwai
Come menzionato in una risposta diversa, poiché Android considera un gruppo di elenchi non espanso come vuoto, l'icona non viene disegnata anche se il gruppo ha figli.
Questo link risolto il problema per me: http://mylifewithandroid.blogspot.com/2011/06/hiding-group-indicator-for-empty-groups.html
In pratica dovete impostare il drawable di default come trasparente, spostare il drawable nella vostra vista del gruppo come un ImageView e commutare l'immagine nel vostro adattatore.
in base alla risposta del StrayPointer e il codice dal blog, è possibile semplificare il codice ancora di più:
Nella tua xml aggiungere il seguente per ExpandableListView:
android:groupIndicator="@android:color/transparent"
Poi nella scheda si fa il seguente:
@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);
}
}
utilizzando il metodo setImageResource si ottiene tutto fatto con un one-liner. Non sono necessari i tre array Integer nell'adattatore. Inoltre, non è necessario un selettore XML per lo stato espanso e compresso. Tutto è fatto tramite Java.
Inoltre, questo approccio visualizza anche l'indicatore corretto quando un gruppo viene espanso per impostazione predefinita, ciò che non funziona con il codice dal blog.
dove posso applicare questo codice? – Karthik
Questo è pensato per essere utilizzato nel metodo 'getGroupView()' della vostra implementazione 'BaseExpandableListAdapter'. Dai un'occhiata a [esempio di implementazione] (http://mylifewithandroid.blogspot.co.uk/2011/06/hiding-group-indicator-for-empty-groups.html). – jenzz
+1 per la tua risposta @Jeans ho già attraversato quel collegamento thnx ... – Karthik
Prova questa >>>
per tutti gli elementi
getExpandableListView().setGroupIndicator(null);
in XML
android:groupIndicator="@null"
Utilizzare questo è perfettamente lavorando per me.
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/group_indicator_expanded" android:state_empty="false" android:state_expanded="true"/>
<item android:drawable="@drawable/group_indicator" android:state_empty="true"/>
<item android:drawable="@drawable/group_indicator"/>
</selector>
Potresti pubblicare anche il tuo codice ExpandableListView? Questo non funziona per me (l'indicatore group_ appare per i gruppi con e senza figli). –
Ho visto questo codice molte volte e non funziona. – Joseph
Nel codice basta usare l'XML personalizzato per la lista di gruppo e in che mettere il ImageView per GroupIndicator.
E Aggiungere di seguito gli array in 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
};
anche in metodo ExpandableListAdapter aggiungere stesse cose, come di seguito
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;
}
Riferimento: http://mylifewithandroid.blogspot.in/2011/06/hiding-group-indicator-for-empty-groups.html
vi proponiamo la mia soluzione:
1) Cancellare groupIndicator default:
<ExpandableListView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="240dp"
android:layout_gravity="start"
android:background="#cccc"
android:groupIndicator="@android:color/transparent"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
/>
2) in ExpandableAdapter:
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = new TextView(context);
}
((TextView) convertView).setText(groupItem.get(groupPosition));
((TextView) convertView).setHeight(groupHeight);
((TextView) convertView).setTextSize(groupTextSize);
//create groupIndicator using TextView drawable
if (getChildrenCount(groupPosition)>0) {
Drawable zzz ;
if (isExpanded) {
zzz = context.getResources().getDrawable(R.drawable.arrowup);
} else {
zzz = context.getResources().getDrawable(R.drawable.arrowdown);
}
zzz.setBounds(0, 0, groupHeight, groupHeight);
((TextView) convertView).setCompoundDrawables(null, null,zzz, null);
}
convertView.setTag(groupItem.get(groupPosition));
return convertView;
}
Semplicemente, si crea un nuovo layout xml con height = 0 per la intestazione di gruppo nascosta. Per esempio, è 'group_list_item_empty.xml'
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="0dp">
</RelativeLayout>
Allora la vostra normale layout dell'intestazione gruppo è 'your_group_list_item_file.xml'
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="horizontal">
...your xml layout define...
</LinearLayout>
Infine, è sufficiente aggiornare il metodo getGroupView nella classe Adapter:
public class MyExpandableListAdapter extends BaseExpandableListAdapter{
//Your code here ...
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup viewGroup) {
if (Your condition to hide the group header){
if (convertView == null || convertView instanceof LinearLayout) {
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.group_list_item_empty, null);
}
return convertView;
}else{
if (convertView == null || convertView instanceof RelativeLayout) {
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.your_group_list_item_file, null);
}
//Your code here ...
return convertView;
}
}
}
IMPORTANTE: La tag root dei file di layout (nascosto e normale) m Ust essere diversa (come sopra esempio LinearLayout e RelativeLayout)
questo potrebbe essere un altro modo da XML, impostare android:groupIndicator="@null"
Riferimento Link: https://stackoverflow.com/a/5853520/2624806
Hai provato a cambiare ExpandableListView
s' attributo android:groupIndicator="@null"
?
non per tutti i gruppi. – Ich
convertView.setVisibility (View.GONE) dovrebbe fare il trucco.
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
DistanceHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.list_search_distance_header, parent, false);
if (getChildrenCount(groupPosition)==0) {
convertView.setVisibility(View.GONE);
}
Questo rimuove solo tutti gli elementi: Elenco è vuoto -> me è triste :( – Ich
hai aggiunto il controllo contatore? If (getChildrenCount (groupPosition) == 0) { –
Volevo solo migliorare la risposta di Mihir Trivedi. È possibile inserire questo all'interno getGroupView() che è dentro di classe MyExpandableListAdapter
View ind = convertView.findViewById(R.id.group_indicator);
View ind2 = convertView.findViewById(R.id.group_indicator2);
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);
/*toggles down button to change upwards when list has expanded*/
if(stateSetIndex == 1){
ind.setVisibility(View.INVISIBLE);
ind2.setVisibility(View.VISIBLE);
Drawable drawable = indicator.getDrawable();
drawable.setState(GROUP_STATE_SETS[stateSetIndex]);
}
else if(stateSetIndex == 0){
ind.setVisibility(View.VISIBLE);
ind2.setVisibility(View.INVISIBLE);
Drawable drawable = indicator.getDrawable();
drawable.setState(GROUP_STATE_SETS[stateSetIndex]);
}
}
}
... e per quanto riguarda la vista layout, questo è come la mia group_items.xml sembra essere
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/group_heading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:textSize="15sp"
android:textStyle="bold"/>
<ImageView
android:id="@+id/group_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/arrow_down_float"
android:layout_alignParentRight="true"
android:paddingRight="20dp"
android:paddingTop="20dp"/>
<ImageView
android:id="@+id/group_indicator2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/arrow_up_float"
android:layout_alignParentRight="true"
android:visibility="gone"
android:paddingRight="20dp"
android:paddingTop="20dp"/>
Spero che aiuti ... ricorda di lasciare un upvote
- 1. come nascondere l'indicatore ExpandableListView per gruppi senza figli
- 2. EspandibileListView mostra un indicatore per gruppi senza figli
- 3. Gruppi aggiunti in ExpandableListView
- 4. multistrato ExpandableListView
- 5. ExpandableListView inside ExpandableListView
- 6. XSLT copia dei senza figli
- 7. Ottenere figli di un elemento senza i nodi di testo
- 8. Ottenere il contenuto di un elemento SENZA i suoi figli
- 9. nascondi/nascondi tutti i commenti in xcode
- 10. selezione jquery di elementi senza figli visibili
- 11. mvvmcross expandablelistview
- 12. Android: Nascondere i divisori per bambini in ExpandableListView
- 13. jquery - ottenere il testo per l'elemento senza figli testo
- 14. Android ExpandableListView - Alla ricerca di un tutorial
- 15. Come analizzare i nodi figli?
- 16. ExpandableListView campione da parte di Google
- 17. Come trovare tutti i processi figli?
- 18. Nascondi riga da ListView senza occupare spazio
- 19. ExpandableListView e caselle di controllo
- 20. UITextField nascondi tutti i caratteri
- 21. ExpandableListView e NavigationDrawer
- 22. ActiveRecord: contare con i gruppi
- 23. ExpandableListView multilivello in Android
- 24. definizione ExpandableListView in xml
- 25. Boxplot per gruppi?
- 26. Aggiungi animazione a ExpandableListView
- 27. Ottenere i conteggi dei figli tramite HQL
- 28. Come cercare i figli di un HTMLDivElement?
- 29. Gruppi nidificati di Django: Gruppi in gruppi
- 30. Avere Supervisord Riavvia periodicamente i processi figli
Per chiarire: C'è un modo per nascondere l'indicatore di gruppo SOLO per i gruppi senza figli? – AlleyOOP