Mehrere Spalten mit Custom Views

  • Antworten:11
Mike W.
  • Forum-Beiträge: 87

26.09.2011, 20:30:24 via Website

Hallo zusammen.
Ich möchte eine Activity haben, in der es mehrere Spalten (4-7) gibt, die mit Custom Views und unterschiedlichen Daten gefüllt sind.
Die Daten werden Spalte für Spalte aus einer Datenbank geholt und ausgegeben, daher funktioniert eine GridView leider schon mal nicht.
Ich habe bisher an mehrere ListViews gedacht (da wird leider getView meines Custom Adapters nicht aufgerufen, wenn mehrere ListViews drin sind, weiss nicht wieso...) oder die Views alle dynamisch in ein RelativeLayout packen, aber da wurde es mir nach n paar Stunden zu kompliziert.
Habt ihr dafür Lösungsansätze?

Wäre für eure Hilfe dankbar :)

Grüsse, Mike

Antworten
Mike W.
  • Forum-Beiträge: 87

29.09.2011, 06:27:50 via App

Hat niemand eine Idee wie man das umsetzen kann?

Antworten
Gelöschter Account
  • Forum-Beiträge: 294

29.09.2011, 08:28:31 via App

Wieviele verschiedene Column-Kombinationen der 7 Views gibt es?

Du könntest die verschiedenen Kombinationen in XML vordefinieren und "inflaten" oder auch Custom-Views daraus machen.

Antworten
Mike W.
  • Forum-Beiträge: 87

29.09.2011, 09:51:05 via App

Eine TableView geht leider nicht, da die Spalten unterschiedlich viele Einträge haben können. Z.B kanb Spalte 1 3 Einträge und Spalte 2 6 Einträge habe.

Spaltenkombinationen gibt es 4, aber ich verstehe nicht wie ich die vordefinieren soll. Die Spalten werden mit Daten der User abgefüllt.

Antworten
Gelöschter Account
  • Forum-Beiträge: 294

29.09.2011, 10:11:41 via Website

Du schreibst das die Daten aus einer Datenbank kommen. Irgendjemand oder -etwas hat die dort mal eingestellt. An Hand dieser Daten sollte man schon erkennen können welche Row-Kombination für die Darstellung notwendig ist.

Wie sieht die Datenbank Struktur aus?

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

29.09.2011, 11:23:03 via Website

Man liest die Datenbank doch eh Zeilenweise, die Anzahl der Spalten ist pro Durchlauf fix und man liest die Spalten immer in der gleichen Reihenfolge.
Dann kannst du doch die leeren Felder in der Tabelle mit leeren TextViews auffüllen.

Mal eine andere Frage:
Warum holst du die Daten pro Spalte einzeln? Dadurch verlieren sie doch ihren Sinnzusammenhang und du musst sie in der Tabelle wieder von Hand in Zeilen zusammenfügen.
Selektier doch lieber pro Kombination die dazu nötigen Spalten in einer Abfrage.

— geändert am 29.09.2011, 11:30:22

Antworten
Mike W.
  • Forum-Beiträge: 87

29.09.2011, 17:33:22 via Website

Ok, hier mal die Struktur der DB-Tabelle:
Mehrere String-Felder, die als Custom View in der Activity ausgegeben werden (1 Custom Activity = 1 Feld in einer Spalte des Layouts)
1 Int-Feld, das definiert in welcher Spalte des Layouts dieser DB-Record erscheinen soll.

@Rafael: Meinst du ich soll die Records der Reihe nach durchlesen und z.B. solange wie es in Spalte 1 Records haben neue TableRows (inkl. den Views für den Record) erstellen und in einer Liste zwischenspeichern, so dass ich für die folgenden Spalten die Referenzen habe?

Antworten
Gelöschter Account
  • Forum-Beiträge: 294

29.09.2011, 19:45:47 via Website

Das ist *keine Struktur* einer Datenbank!

Potentielle Helfer sind durch diese "Details" nicht eben schlauer geworden. Ohne DDL kann man auf diese Fragen keine Antwort geben.

Antworten
Mike W.
  • Forum-Beiträge: 87

29.09.2011, 22:18:41 via Website

myDB.execSQL("CREATE TABLE IF NOT EXISTS Stundenplan (_id INTEGER PRIMARY KEY AUTOINCREMENT, fach VARCHAR, lehrer VARCHAR, raum VARCHAR, tag INTEGER, woche INTEGER, start VARCHAR, ende VARCHAR);");

Das ist mein Statement um die Tabelle zu erstellen. Tut mir leid, ich dachte die Beschreibung reicht in etwa :(
Die Spalten im Layout repräsentieren hier also einen jeweiligen Tag, die Custom Views beinhalten die Felder Fach, Lehrer, Raum, Start und Ende.

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

30.09.2011, 09:29:28 via Website

Also wenn die Daten in einer Tabelle stehen, solltest du die auf jeden Fall auch in einen Stück selektieren, sonst verlierst du doch komplett den semantischen Zusammenhang und musst die Uhrzeiten, Lehrer und Fächer im schlimmsten Fall nochmal neu einander zuordnen, weil du nicht sicher sein kannst, ob die Sortierung auf allen Spalten erhalten bleibt.

Mach einen Select auf die Spalten, die du jeweils brauchst und dann stell die in einem TableLayout dar, oder in einem ListView mit selbst definierten Listen Elementen, oder oder oder :)
Dann löst sich das Problem der unterschiedlich langen Spalten doch von selbst.

— geändert am 30.09.2011, 09:30:10

Antworten
Mike W.
  • Forum-Beiträge: 87

03.10.2011, 19:43:18 via Website

Habs jetzt hinbekommen mit einem TableLayout und dynamischen TableRows.
Jetzt möchte ich allerdings noch einen kleinen Abstand zwischen den einzelnen TableRows (bzw am liebsten auch zwischen jeder Custom View) haben.
Habe es mit LayoutParams und setMargin (oder direkt über das Feld topMargin) versucht, aber da ändert sich nichts.

Hier der Code den ich verwenden würde:

1TableLayout.LayoutParams lp = new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT);
2lp.setMargins(0, 50, 0, 0);
3
4/* ... */
5TableRow row = new TableRow(this);
6row.setLayoutParams(lp);

Das sollte doch eigentlich so funktionieren oder nicht?

Antworten