Ich habe eine Aktivität namens Session
, die verschiedene Tabellen zeigt und wenn die Schaltfläche für jede Tabelle angeklickt wird, sollte die Seats
angezeigt werden, aber sie werden nur für die erste Tabelle angezeigt.Nur das erste Fragment ist korrekt gezeichnet
Sitzung enthält eine Liste der Table Fragments
und jede Tabelle enthält eine Liste der Seat Fragments
.
[Activity] Session
[List<TableFragment>] Tables
[List<SeatFragment>] Seats
Erwartetes Ergebnis auf allen Tischen:
Wie es auf allen Tischen, außer auf der ersten Tabelle aussieht:
Auch wenn ich die Session
Aktivität eine leere Tabelle eingeben erstellt mit dem "Table Name" und den "Seats" mit dem Namen der Seat Fragment
, die seltsam ist. "Tabellenname" ist eine Variable, die aus der Layout-Datei genommen wird, so dass es in Ordnung ist, aber die Schaltflächen werden programmatisch erzeugt, so dass sie nicht in diesem "leeren" Fragment sein sollten. Der "Tabellenname" Text wird auf allen verschiedenen Table Fragments
richtig angezeigt, so dass ich ziemlich sicher bin, dass es etwas damit zu tun hat, wenn ich die Seat Fragments
erstelle, aber ich weiß nicht, was es sein könnte. Alle Tags sind unterschiedlich und die erste Tabelle funktioniert wie ein Zauber.
In Session
Ich habe eine Methode, um die Tabellen zu erstellen und gleichzeitig die Sitze zu erstellen. Ich dachte zuerst hatte es etwas mit dem zu tun Commit einige Zeit so nehmen zog ich es von create, aber mit dem gleichen Ergebnis:
private void CreateTables()
{
try
{
tables = new List<Fragments.Session.Table>();
foreach (var table in A.ActiveSession.Tables)
{
FragmentTransaction trans = this.FragmentManager.BeginTransaction();
var frag = new Fragments.Session.Table();
trans.Add(Resource.Id.frameLayoutSessionTable, frag, "table-" + table.Id.ToString());
trans.Commit();
frag.CreateSeats(table.Seats);
tables.Add(frag);
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
Toast.MakeText(this, "Could not create tables ...", ToastLength.Short).Show();
}
}
Table.CreateSeats():
public void CreateSeats(List<SessionSeatViewModel> _seats)
{
Console.WriteLine("Fragments.Table.CreateSeats()");
seats = new List<Seat>();
foreach (var seat in _seats)
{
Console.WriteLine("Tag: " + "seat-" + seat.Id.ToString());
var tag = "seat-" + seat.Id.ToString();
FragmentTransaction trans = this.FragmentManager.BeginTransaction();
var frag = new Fragments.Session.Seat();
trans.Add(Resource.Id.layoutSeats, frag, tag);
trans.Commit();
seats.Add(frag);
}
}
ich kann, dass die Sitze werden wie erwartet erstellt und wenn ich meinen „Table.Show()“ rufe das korrekte Sitz-IDs in das Protokoll ausgedruckt werden:
var activeTable = this.FragmentManager.FindFragmentByTag<Fragments.Session.Table>("table-" + table.Id.ToString());
activeTable.Update(table); //Updates the seats with correct values
activeTable.Show();
Table.Show():
public void Show()
{
Console.WriteLine("Fragments.Table.Show()");
this.FragmentManager.BeginTransaction().Show(this).Commit();
foreach (var seat in seats)
seat.Show();
}
Seat.Show():
public void Show()
{
Console.WriteLine("Fragments.Session.Seat.Show()");
this.FragmentManager.BeginTransaction().Show(this).Commit();
}
Ich habe auch versucht this.FragmentManager.ExecutePendingTransactions()
nachdem ich jede Tabelle erstellt und vor CreateSeats
ohne Glück.