1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

[Tutorial:] ExpandableView mit X Leveln

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Unicate, 13.04.2011.

  1. Unicate, 13.04.2011 #1
    Unicate

    Unicate Threadstarter Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Hallo alle zusammen!

    Ich habe mich gestern mal hingesetzt und ein Tutorial zu einem meiner Probleme geschrieben, welche ich hatte. Ich wenn Ihr Lust und Zeit habt, bitte ich euch dieses einmal durchzulesen und eure Meinung dazu abzugeben.

    Tutorial: Expandable View mit X Leveln

    Danke und Viel Spaß damit!
     
    GalaxyKeks und DieGoldeneMitte haben sich bedankt.
  2. GalaxyKeks, 13.04.2011 #2
    GalaxyKeks

    GalaxyKeks Android-Guru

    Beiträge:
    2,004
    Erhaltene Danke:
    356
    Registriert seit:
    16.08.2010
    Phone:
    OnePlus3, Nexus 6P
    Find ich gut!
    Ich wollte mich auch mal damit auseinander setzen :)

    Muss ich mir bei Gelegenheit mal im Detail durchlesen.
     
  3. pyretta, 05.05.2011 #3
    pyretta

    pyretta Android-Hilfe.de Mitglied

    Beiträge:
    95
    Erhaltene Danke:
    1
    Registriert seit:
    24.01.2011
    Hallo Unicate,
    Hallo GalaxyKeks,

    ich habe mir auch eine ExpandableListView gebastelt. Funktioniert auch, ist aber nur mit jeweils einem Unterelement (brauche nicht mehr), also sehr viel simpler als das was in diesem Tutorial (das übrigens klasse is!) gezeigt wird.

    Ich hab nur leider 2 kleine Problemchen die mit diesem Tutorial zwar nichts zutun haben, aber vielleicht könnt ihr mir ja trotzdem weiterhelfen...

    1. Ich bräuchte eine ScrollView um die ExpandableListView, weil zuviele Listenelemente. Wenn ich das aber drumrum packe, dann ist der Bildausschnitt verdammt klein, man sieht nur noch 2 Elemente, mit Mühe und Not. Wie kann ich das denn lösen?

    Code hierzu:
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="10dip">
    
    <LinearLayout 
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
        <TextView 
                   android:layout_width="fill_parent"
                   android:layout_height="wrap_content"
                   android:text="Version: 1.0"/>
                   
        <TextView 
                   android:layout_width="fill_parent"
                   android:layout_height="wrap_content"
                   android:text="Stand: 5. Mai 2011"
                   android:layout_marginBottom="20dip"
                  />
        
     <ExpandableListView android:id="@+id/android:list"
                   android:layout_width="fill_parent"
                   android:layout_height="fill_parent"/>
     
         <TextView android:id="@+id/android:empty"
                   android:layout_width="fill_parent"
                   android:layout_height="wrap_content"
                   android:text="No items"/>
    </LinearLayout>
    
    </ScrollView>
    
    2. Die Standard Pfeilnöppels sind mir viel zu groß. Wie bzw. wo kann ich das denn durch eigene Grafiken ersetzen?

    Wäre euch wirklich dankbar wenn ihr mir helfen könntet.
    Vielen Dank.

    Liebe Grüße,
    pyretta
     
  4. swordi, 05.05.2011 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    eine listview oder eine explistview darf man nicht eine scrollview geben.

    die listview scroll ja schon selbst

    du kannst die pfeile mit

    expListView.setGroupIndicator(drawable) ändern
     
  5. Unicate, 05.05.2011 #5
    Unicate

    Unicate Threadstarter Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Da hat er recht. Doppelte Scrollview's sehen scheiße aus, aber die ExpandableView sollte von natur aus schon "scrollable" sein.

    Ich nehm aber mal an das du den TextView gedöhns auch scrollable machen willst.

    Man könnte die ersten Elemente der ExpandableView zur anderen View's umfummeln (Im Adapter unter getView) aber es ist wie schon gesagt ein fummeln und keine schöne Lösung. (Wenn es dafür eine saubere Lösung gibt, belehrt mich eines besseren!)
     
  6. pyretta, 06.05.2011 #6
    pyretta

    pyretta Android-Hilfe.de Mitglied

    Beiträge:
    95
    Erhaltene Danke:
    1
    Registriert seit:
    24.01.2011
    Vielen Dank swordi, Vielen Dank Unicate!

    Dass die Liste von selber scrollt hatte ich übersehen im Eifer des Gefechts... sorry...

    Das mit der Gestaltung hatte ich zunächst wie ich es gewohnt war über die XML versucht und und zwar wie folgt:

    Code:
    <ExpandableListView android:id="@+id/android:list"
                   android:layout_width="fill_parent"
                   android:layout_height="fill_parent"
                   android:dividerHeight="2dip"
                   android:groupIndicator="@drawable/pfeil_rechts"
                   android:childIndicator="@drawable/pfeil_runter"
                   />
    
    Wieso geht das denn nicht? :glare: Das wär so schön einfach gewesen...
    Für was gibts die Möglichkeit denn überhaupt?

    Deine Lösung, swordi, scheitert mal wieder an meinen mangelnden Java-Kenntnissen. Ich weiss einfach nicht wooo ich das reinpacken muss.:blushing:




    Mir fällt grade noch was ein, was schön wäre wenn es ginge....

    Kann ich denn innerhalb hiervon:
    Code:
    HashMap child = new HashMap();
                child.put( "Sub Item", "Langer Text........." );
                secList.add( child );
    
    anstatt den langen Text direkt reinzutackern auch einen String von strings.xml nehmen? Wenn ja, wie mach ich denn das? :blushing:
     
    Zuletzt bearbeitet: 06.05.2011
  7. swordi, 06.05.2011 #7
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    tja irgendwo, wo du deine exp listview initialisierst
     
  8. pyretta, 06.05.2011 #8
    pyretta

    pyretta Android-Hilfe.de Mitglied

    Beiträge:
    95
    Erhaltene Danke:
    1
    Registriert seit:
    24.01.2011
    hmm...

    überall wo ich das einfüge sagt es mir folgendes:

    The method setGroupIndicator(Drawable) in the type ExpandableListView is not applicable for the arguments (Class<R.drawable>)

    hab es so geschrieben:

    Code:
    ExpandableListView.setGroupIndicator(R.drawable.pfeil_rechts);
    
    mein ganzer Code sieht wie folgt aus:

    Code:
    package de.expand.test;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import android.app.ExpandableListActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ExpandableListView;
    import android.widget.SimpleExpandableListAdapter;
     
    public class home extends ExpandableListActivity {
     
        @SuppressWarnings("unchecked")
        public void onCreate(Bundle savedInstanceState) {
            try{
                 super.onCreate(savedInstanceState);
                 setContentView(R.layout.main);
     
            SimpleExpandableListAdapter expListAdapter =
                new SimpleExpandableListAdapter(
                        this,
                        createGroupList(),              // Creating group List.
                        R.layout.group_row,             // Group item layout XML.
                        new String[] { "Group Item" },  // the key of group item.
                        new int[] { R.id.row_name },    // ID of each group item.-Data under the key goes into this TextView.
                        createChildList(),              // childData describes second-level entries.
                        R.layout.child_row,             // Layout for sub-level entries(second level).
                        new String[] {"Sub Item"},      // Keys in childData maps to display.
                        new int[] { R.id.grp_child}     // Data under the keys above go into these TextViews.
                    );
                setListAdapter( expListAdapter );       // setting the adapter in the list.
     
            }catch(Exception e){
                System.out.println("Errrr +++ " + e.getMessage());
            }
        }
     
        /* Creating the Hashmap for the row */
        @SuppressWarnings("unchecked")
        private List createGroupList() {
              ArrayList result = new ArrayList();
              for( int i = 0 ; i < 1 ; ++i ) { // 15 groups........
                HashMap m = new HashMap();
                m.put( "Group Item","Listenelement 1"  ); // the key and it's value.
                result.add( m );
                HashMap m1 = new HashMap();
                m1.put( "Group Item","Listenelement 2"  ); // the key and it's value.
                result.add( m1 );
                HashMap m2 = new HashMap();
                m2.put( "Group Item","Listenelement 3"  ); // the key and it's value.
                result.add( m2 );
              }
              return (List)result;
        }
     
        /* creatin the HashMap for the children */
        @SuppressWarnings("unchecked")
        private List createChildList() {
     
            ArrayList result = new ArrayList();
            for( int i = 0 ; i < 3 ; ++i ) { // this -15 is the number of groups(Here it's fifteen)
              /* each group need each HashMap-Here for each group we have 3 subgroups */
              ArrayList secList = new ArrayList();
              for( int n = 0 ; n < 1 ; n++) {
                HashMap child = new HashMap();
                child.put( "Sub Item", "Erklärender Text 1" );
                secList.add( child );
              }          
              ArrayList secList2 = new ArrayList();
              for( int n = 0 ; n < 1 ; n++ ) {
                HashMap child1 = new HashMap();
                child1.put( "Sub Item", "Erklärender Text 2" );
                secList2.add( child1 );
              }
              ArrayList secList3 = new ArrayList();
              for( int n = 0 ; n < 1 ; n++ ) {
                HashMap child2 = new HashMap();
                child2.put( "Sub Item", "Erklärender Text 3" );
                secList3.add( child2 );
              }
             result.add( secList );
             result.add( secList2 );
             result.add( secList3 );
            }
            return result;
        }
        public void  onContentChanged  () {
            System.out.println("onContentChanged");
            super.onContentChanged();
        }
        /* This function is called on each child click */
        public boolean onChildClick( ExpandableListView parent, View v, int groupPosition,int childPosition,long id) {
            System.out.println("Inside onChildClick at groupPosition = " + groupPosition +" Child clicked at position " + childPosition);
            return true;
        }
     
        /* This function is called on expansion of the group */
        public void  onGroupExpand  (int groupPosition) {        
            try{           
                 System.out.println("Group exapanding Listener => groupPosition = " + groupPosition);
            }catch(Exception e){
                System.out.println(" groupPosition Errrr +++ " + e.getMessage());
            }
        }
    }
    
     
  9. swordi, 06.05.2011 #9
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    naja du musst ein drawable mitgeben und nicht ein integer

    du solltest dich vorher mal mit java beschäftigen bevor du dich an android ranwagst.

    java wird einfach vorausgesetzt.
     

Diese Seite empfehlen