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

ListView mit Header oder Footer

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von goes, 05.05.2011.

  1. goes, 05.05.2011 #1
    goes

    goes Threadstarter Junior Mitglied

    Beiträge:
    33
    Erhaltene Danke:
    0
    Registriert seit:
    17.09.2010
    Hi,

    ich bin am verzweifeln. Versuche schon seit Stunden ein Layout hinzu kriegen, welches ungefähr so aussieht:

    Button Button
    List Item
    List Item
    List Item

    was ich bis jetzt habe, sieht so aus:
    HTML:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    
        <LinearLayout android:layout_width="fill_parent"
        android:orientation="horizontal" android:layout_height="wrap_content"
        android:paddingTop="10dp" style="@android:style/ButtonBar">
        
            <Button 
            android:id="@+id/switchNewEntry" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:onClick="switchToNewEntry" 
            android:text="Neue Notiz"></Button>
            <Button 
            android:id="@+id/button2"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:text="Read" 
            android:onClick="readData"></Button>
        </LinearLayout>
    
        
        <ListView android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:id="@+id/list"
        android:layout_alignParentTop="true" android:layout_above="@id/switchNewEntry" />
            
            
        
    </LinearLayout>
    Ich weiß vorallem auch nicht, wie der Code dann im onCreate aussehen muss. Ich schaffe es immer nur mir entweder ein ListView oder die Buttons anzeigen zu lassen, aber beides zusammen haut überhaupt nicht hin.

    Wäre super wenn mir da jemand weiterhelfen könnte.

    Gruß
     
  2. swordi, 05.05.2011 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    lass mal alle unnötigen attribute weg und versuchs von anfang an schritt für schritt

    <linearlayout vertical>
    <linearlayout horizontal>
    <button>
    <button>
    </linearlayout horizontal>
    <ListView />
    </linearlayout vertical>

    jeweils nur layout_height und layout_width angeben

    dann solltest du eignetlich die gewünschte anordnung haben.

    danach einfach die attribute nacheinander ergänzen und schauen wo das layout zerstört wird
     
    goes bedankt sich.
  3. goes, 06.05.2011 #3
    goes

    goes Threadstarter Junior Mitglied

    Beiträge:
    33
    Erhaltene Danke:
    0
    Registriert seit:
    17.09.2010
    Hi,

    vielen dank, habs jetzt hinbekommen. :)

    Nun hab ich aber schon die nächste Frage für die ich aber net extra ein Thema aufmachen will.
    Ich befülle momentan meine Liste mit Werten aus meiner SQLite DB.
    Sieht also z.B. so aus:
    Eintrag 1
    Eintrag 2
    Eintrag 3

    Jezt hat jeder dieser Einträge in der Datenbank natürlich eine ID. Wie schaff ich es jetzt, dass wenn ich auf einen Listeneintrag klicke mir die jeweils passende ID zu dem Eintrag geklickten Eintrag angezeigt wird. Vorraussetzung ist natürlich, dass ich mir beim holen der Einträge aus der DB die ID natürlich mit raus hole.
    Ich weiß jetzt halt nur nicht wo ich diese ID passend zum Listeneintrag hinschreiben soll. Gibt es für Listeneinträge irgendwelche versteckten Propertys oder ähnliches wo ich meine ID reinschreiben könnte um sie später wie auslesen zu können?

    Gruß
     
  4. swordi, 06.05.2011 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    customadapter ist das stichwort
     
  5. goes, 09.05.2011 #5
    goes

    goes Threadstarter Junior Mitglied

    Beiträge:
    33
    Erhaltene Danke:
    0
    Registriert seit:
    17.09.2010
    Hi,

    bin wieder einen Schritt weiter. Habe mir jetzt so einen Custom Base Adapter gebastelt und mir werden auch daten so wie ich wollte angezeigt.

    Leider hab ich jetzt das nächste Problem
    Ich befülle eine ArrayList mit Datenbankinhalten. Eigentlich steht jeder Schleifendurchlauf für einen Datenbankeintrag mit ID und Value. Nur krieg ich das gerade nicht richtig in die Liste abgespeichert.

    Code:
    ArrayList<String> myArr = new ArrayList<String>();
    while(c.isAfterLast() == false) {
                myArr.add(c.getString(0)); //ID
                myArr.add(c.getString(1)); //Value
                c.moveToNext();
    }
    ListAdapter adapter = new MyListAdapter(myArr, this);
    lv.setAdapter(adapter);
    

    Ergebniss ist dann natürlich, dass mir die Werte in der Liste nicht wie ich möchte so angezeigt werden:

    ID - Value
    ID - Value
    ID - Value

    sondern so.

    ID
    Value
    ID
    Value

    Ich habe schon versucht mit ArrayList of ArrayList zu hantieren, hat aber alles nicht so wirklich geklappt.
    Meine Frag ist halt, wie ich die Daten am besten in ein Format bringen kann um sie später in der richtigen konstelation auslesen zu können.

    Gruß
     
  6. ApeDick, 09.05.2011 #6
    ApeDick

    ApeDick Android-Hilfe.de Mitglied

    Beiträge:
    114
    Erhaltene Danke:
    8
    Registriert seit:
    21.03.2011
    Alleine vom Design her ist das schon schrecklich.
    Auch wenn du in deiner ArrayList nur Strings hast, sollte doch in jedem Element das gleiche drinstehen. Also entweder ID oder VALUE.

    Warum baust du dir nicht ein Objekt welches die Attribute ID und VALUE hat und steckst das dann in die ArrayList. Solltest dann aber auch die toString() Methode überschreiben.
     
  7. goes, 09.05.2011 #7
    goes

    goes Threadstarter Junior Mitglied

    Beiträge:
    33
    Erhaltene Danke:
    0
    Registriert seit:
    17.09.2010
    Hab mir jetzt so eine Klasse geschrieben.

    public class MyNotes {
    private Integer ID;
    private String Note;


    public void AddNote(Integer ID, String Note) {
    this.ID = ID;
    this.Note = Note;
    }

    public String getID() {
    return this.ID.toString();
    }
    public String getNote() {
    return this.Note;
    }
    }

    und rufe das ganze dann so auf:

    MyNotes AllNotes = new MyNotes();
    AllNotes.AddNote(1,"test");
    AllNotes.AddNote(2,"test");
    AllNotes.AddNote(3,"test");

    aber damit komm ich null weiter, weil ich mir natürlich jedesmal die vorherigen werte überschreibe.
     
  8. ApeDick, 09.05.2011 #8
    ApeDick

    ApeDick Android-Hilfe.de Mitglied

    Beiträge:
    114
    Erhaltene Danke:
    8
    Registriert seit:
    21.03.2011
    Ich möcht dir ja nicht zu Nahe treten, aber vielleicht solltest du erstmal richtig Java lernen bevor du mit der Entwicklung für Android beginnst.

    Du musst in der Schleife das jedesmal das Objekt neu instanziieren und der ArrayList übergeben. Sonst arbeitest du natürlich jedesmal auf der gleichen Instanz und überschreibst deine Attribute....

    List<Object> meineListe = new ArrayList<Object>();
    for(........){
    Object meinObject = new Object();
    ->Mach was
    meineListe.add(meinObject);
    }
     
    swordi bedankt sich.
  9. swordi, 09.05.2011 #9
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    das ist immer ein guter tipp :D
     
  10. ApeDick, 09.05.2011 #10
    ApeDick

    ApeDick Android-Hilfe.de Mitglied

    Beiträge:
    114
    Erhaltene Danke:
    8
    Registriert seit:
    21.03.2011
    Meinst du? :lol:
     
  11. goes, 09.05.2011 #11
    goes

    goes Threadstarter Junior Mitglied

    Beiträge:
    33
    Erhaltene Danke:
    0
    Registriert seit:
    17.09.2010
    ja ich weiß :/

    danke trotzdem :)
     
  12. loocker, 23.04.2012 #12
    loocker

    loocker Junior Mitglied

    Beiträge:
    44
    Erhaltene Danke:
    3
    Registriert seit:
    13.09.2011
    Hi,

    ist es möglich ein Header einer Listview auch dynamisch mit inhalten zu füllen? Habe es bis jetzt nur statisch hinbekommen, also wenn der text schon in der xml steht.

    das steht in der ListActivity Klasse in der onCreate methode vor SetAdapter;
    Code:
    ListView lv = getListView(); 
    LayoutInflater inflater = getLayoutInflater(); 
    ViewGroup header = (ViewGroup)inflater.inflate(R.layout.header, lv, false); 
    lv.addHeaderView(header, null, false);
    Aber mit
    Code:
     
    [SIZE=2][COLOR=#7f0055][B][SIZE=2][COLOR=#7f0055]final[/COLOR][/SIZE][/B]
    [LEFT][/COLOR][/SIZE][SIZE=2]TextView text= (TextView)findViewById(R.id.[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]tx_text[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2]);[/SIZE]
    [SIZE=2]text.setText([/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]Objekt[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]text[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);[/SIZE][/LEFT]
    
    
    funktioniert es nicht​


    Das Problem ist das ich mehrere Textviews habe und dann eine Liste haben möchte. Und das ganze in eine SchrollView packen funktioniert, auf Grund der ListView.​
     
    Zuletzt bearbeitet: 23.04.2012
  13. Heppy1985, 25.07.2015 #13
    Heppy1985

    Heppy1985 Neuer Benutzer

    Beiträge:
    15
    Erhaltene Danke:
    0
    Registriert seit:
    15.07.2015
    Ja okay sagt es ruhig , ich sollte erstmal Java lernen bevor ich mich ans app Programmieren mache ;)

    Habe es gelöst (Wie immer wenn ich in nem form ne frage gestellt habe) ich Google mir immer die finger wund und finde nix und direckt nach dem post finde ich ne lösung :)

    also nur für die die es wissen wollen oder die die mir ne alternative vorschlagen wollen hier mein code:

    Code:
    if (sListView.getFooterViewsCount() == 0) {
                    TextView tv = (TextView)findViewById(R.id.txt_spalte_4);
                    tv.setText(dbHelfer.spalte_4_wert);
                    sListView.addFooterView(footer, tv, false);
    ha hab doch noch was gefunden wo ich hilfe brauche :)

    und zwar stürzt meine app ab es sei denn ich mache vorher noch mal einen aufruf

    Code:
    sListView.addFooterView(footer, null, false);
    und klapt es zwar von der Funktion ganz gut aber leider habe ich dann einen riesen abstand zwischen dem listview und dem footer wie kann ich das Problem am besten lösen?

    also app stürzt ab wenn ich das versuche:
    Code:
    
    if (sListView.getFooterViewsCount() == 0) {
                     TextView tv = (TextView)findViewById(R.id.txt_spalte_4);
                     tv.setText(dbHelfer.spalte_4_wert);
                     sListView.addFooterView(footer, tv, false);
    app funktioniert aber leider mit riesen abstand zwischen liste und footer:
    Code:
    [code=JavaScript]
    if (sListView.getFooterViewsCount() == 0) {
                      sListView.addFooterView(footer, null, false);
                     TextView tv = (TextView)findViewById(R.id.txt_spalte_4);
                     tv.setText(dbHelfer.spalte_4_wert);
                     sListView.addFooterView(footer, tv, false);
    [/code]
     

Diese Seite empfehlen