ListView mit Header oder Footer

G

goes

Neues Mitglied
0
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ß
 
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
 
  • Danke
Reaktionen: goes
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ß
 
customadapter ist das stichwort
 
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ß
 
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.
 
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.
 
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);
}
 
  • Danke
Reaktionen: swordi
ApeDick schrieb:
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.

das ist immer ein guter tipp :D
 
Meinst du? :lol:
 
ja ich weiß :/

danke trotzdem :)
 
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:
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:

Javascript:
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

Javascript:
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:
Javascript:
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:
Javascript:
[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]
 

Ähnliche Themen

A
Antworten
10
Aufrufe
1.006
swa00
swa00
D
Antworten
9
Aufrufe
1.732
jogimuc
J
B
Antworten
4
Aufrufe
433
bb321
B
Zurück
Oben Unten