ExpandableListView multilivello

Attualmente sto lavorando su un progetto in cui ho bisogno di qualcosa di simile:

- MainGroup 1 (Expandable) - SubGroup 1 (Expandable) - SubSubGroup 1 (Expandable) - Child View - Child View - ... - SubSubGroup 2 (Expandable) - Child View - Child View - ... - SubGroup 2 (Expandable) - SubSubGroup 3 (Expandable) - Child View - ... - SubSubGroup 4 (Expandable) - Child View - ... - SubGroup 3 (Expandable) - Child View - ... - MainGroup 2 (Expandable) - ... 

Al massimo sarebbe un ExpandableListView all'interno di un ExpandableListView all'interno di un ExpandableListView – così 3 livelli di ExpandableListView :

  • Android: C'è un modo per get altitudine a parte Location.getAltitude ()? (Ho sentito usare il sensore)
  • Utilizza SyncAdapter per sincronizzare i dati * local * gmail e facebook app
  • MapOverlay piace come PopUp
  • Frammenti ancora aggiunti al backstack senza call addToBackStack, perché?
  • Imansible visualizzare l'image dei dati dei contatti in phonegap
  • La distribuzione di Visual Studio 2015 Xamarin non funziona senza alcun messaggio di errore
    • MainGroup avrebbe solo altri ExpandableListView .
    • SubGroup avrebbe in possesso altri SubGroup tranne gli ultimi due, che saranno sempre solo ChildViews . (Sto pensando che questi due potrebbero essere sostituiti con quello per SubSubGroup )
    • SubSubGroup avrebbe sempre tenuto ChildViews .

    Il mio problema è che penso di non capire i principi fondamentali di come i layout di ExpandableListView siano figli. Ho esaminato esempi come questo , ma non riesco a capire la funzionalità.

    Ho provato semplicemente ad aggiungere un ExpandableListView come un figlio in un altro – ma qualcosa non funziona perché solo il primo elemento dell'interno ExpandableListView è visibile se espandi uno dei gruppi esterni. Posso comunque impostare manualmente l'altezza dei contenitori di gruppi esterni per rendere abbastanza grande per mostrare tutti gli elementi nell'interno ExpandableListView . Per essere ottimali, il calcolo dell'altezza dovrebbe naturalmente essere fatto in volo.

    Quindi, per arrivare a alcune domande più solide:

    • Può qualcuno che mi dia una spiegazione del ciclo di vita di ExpandableListView (con questo intendo istantanea, riutilizzo delle viste, espansione / collasso di ascoltatori) tra cui:
      • Come e quando è un ExpandableListView notificato che un bambino è espanso / crollato?
      • Come ExpandableListView l' ExpandableListView quale spazio per far sì che tutti i bambini si inseriscano in un contenitore di gruppo?
    • Quanti vantaggi sono nell'utilizzo di ExpandableListView per creare quanto sopra, rispetto a semplicemente mescolare la mia soluzione utilizzando alcuni LinearLayouts e alcuni OnClickListeners ?

    Modifica

    Per la mia ultima domanda posso notare che ci possono essere da 1 a 20+ MainGroups .

  • wifi getLinkSpeed ​​() restituisce sempre un valore
  • Come posso condividere un'image con la mia applicazione Cordova / PhoneGap da un'altra applicazione?
  • Modifica customText di Android (formato di valuta)
  • Quali sono le differenze tra FLAG_ACTIVITY_RESET_TASK_IF_NEEDED e FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP?
  • Scelta di un ORM per il progetto Android (min. Livello API 7)
  • Più di un fornitore di località allo stesso tempo
  • 3 Solutions collect form web for “ExpandableListView multilivello”

    Innanzitutto, lasciathemes raccomandare il sito GrepCode . Ha fonti di classi Android SDK. Grazie a loro, ho scoperto i principi base di AdapterViews (ti ho dato un link a ExpandableListView, ma è meglio se non solo la ricerca, ma anche i suoi genitori di class).

    Ora, le tue domande e le mie risposte:

    Come e quando è un ExpandableListView notificato che un bambino è espanso / crollato?

    Vedi il metodo handleItemClick (Visualizza v, int posizione, long id)

    Come esplicita l'ExpandableListView con quale spazio per far sì che tutti i bambini si inseriscano in un contenitore di gruppo?

    Non ho esaminato bene questa domanda, ma per quanto ne so, è fatto dal metodo requestLayout (). Inoltre abbiamo scoperto che una vista scorrevole non può essere incorporata in un'altra visualizzazione scorrevole. (È errore noto: mettere ListView in ScrollView o ListView in ExpandableListView).

    Quanti vantaggi sono nell'utilizzo di ExpandableListView per creare quanto sopra, rispetto a semplicemente mescolare la mia soluzione utilizzando alcuni LinearLayouts e alcuni OnClickListeners?

    AdapterViews sono più veloci. Ma la tua costruzione è troppo complessa anche per ExpandableListView. È ansible utilizzare 2 soluzioni.

    1. Soluzione Guru: se sei professionale di progettare le proprie Views / ViewGroups dalla graffiatura (voglio dire che comprendi i methods requestLayout (), dispatchDraw () e così via), quindi scrivi il tuo GrandExpandableListAdapter con 3 livelli.
    2. Soluzione media: utilizza ExpandableListAdapter per i primi 2 livelli e utilizza LinearLayouts per il terzo livello.

    Potresti voler controllare questo progetto. Non l'ho provato, ma credo che vale la pena di provare. L'ExpanadableListView predefinito è abbastanza limitato, originariamente progettato per supportre solo 2 livelli. Puoi sbatterti con esso per farlo sostenere più livelli di quello, ma sarà disordinato.

    Anche se questa non è la soluzione completa, è ancora una sua list a 3 strati espandibili. Così la sua sinistra a te come lo stile.

    ecco la class

     package com.custom.nagee; import android.app.ExpandableListActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.LinearLayout; public class CustomemExpandible extends ExpandableListActivity{ LayoutInflater inflator; boolean flag = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); inflator = LayoutInflater.from(getApplicationContext()); setListAdapter(new MyAdapter()); } @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { if(flag){ v.findViewById(childPosition).setVisibility(View.VISIBLE); flag = false; return true; } v.findViewById(childPosition).setVisibility(View.GONE); flag = true; return true; } class MyAdapter extends BaseExpandableListAdapter{ @Override public Object getChild(int groupPosition, int childPosition) { return null; } @Override public long getChildId(int groupPosition, int childPosition) { return 0; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { LinearLayout linearLayout = (LinearLayout)inflator.inflate(R.layout.group, null); linearLayout.getChildAt(1).setId(childPosition); return linearLayout; } @Override public int getChildrenCount(int groupPosition) { return 2; } @Override public Object getGroup(int groupPosition) { return null; } @Override public int getGroupCount() { return 2; } @Override public long getGroupId(int groupPosition) { return 0; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { return ((LinearLayout)inflator.inflate(R.layout.group, null)); } @Override public boolean hasStableIds() { // TODO Auto-generated method stub return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } } } 

    e qui va il file xml

    group.xml

     <?xml version="1.0" encoding="utf-8"?> 

     <TextView android:id="@+id/editText1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@color/back" android:layout_marginLeft="30dip" android:text="DONE" > </TextView> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginLeft="30dip" android:visibility="gone" > <TextView android:id="@+id/editText2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="DONE"> </TextView> <TextView android:id="@+id/editText3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="DONE" /> <TextView android:id="@+id/editText4" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="DONE" /> </LinearLayout> 

    e questo è sotto la cartella di colore per cambiare il colore del text, la sua sinistra, puoi anche cambiare lo background per get un aspetto migliore.

    back.xml

     <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:color="#808080"/> <item android:state_window_focused="false" android:color="#808080"/> <item android:state_pressed="true" android:color="#808080"/> <item android:state_selected="true" android:color="#000000"/> <item android:color="#FF0000"/> <!-- not selected --> </selector> 

    spero funzioni…

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.