[Tutorial:] ExpandableView mit X Leveln

U

Unicate

Erfahrenes Mitglied
57
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!
 
  • Danke
Reaktionen: GalaxyKeks und DieGoldeneMitte
Find ich gut!
Ich wollte mich auch mal damit auseinander setzen :)

Muss ich mir bei Gelegenheit mal im Detail durchlesen.
 
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
 
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
 
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!)
 
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:
tja irgendwo, wo du deine exp listview initialisierst
 
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());
        }
    }
}
 
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.
 

Ähnliche Themen

R
Antworten
1
Aufrufe
1.093
Tiefkuehlpizza
Tiefkuehlpizza
B
Antworten
4
Aufrufe
489
bb321
B
FabianDev
Antworten
5
Aufrufe
555
swa00
swa00
Zurück
Oben Unten