我有一個名爲Session
的活動,它顯示了不同的表格,當單擊每個表格的按鈕時,應該顯示Seats
,但它們只顯示在第一個表格上。只能正確繪製第一個片段
會話包含Table Fragments
的列表,每個表包含Seat Fragments
的列表。
[Activity] Session
[List<TableFragment>] Tables
[List<SeatFragment>] Seats
此外,當我進入Session
活動創建一個空表與「表名」和「座位」與Seat Fragment
這是奇怪的名稱設置。 「表格名稱」是一個從佈局文件中取得的變量,因此沒問題,但按鈕是以編程方式創建的,所以它們不應該在該「空白」片段中。 「Table Name」文本正在所有不同的Table Fragments
上正確顯示,所以我很確定它在創建Seat Fragments
時與我有關,但我不知道它會是什麼。所有的標籤都不一樣,第一張桌子就像一個魅力一樣。
Session
我有一個方法來創建表,同時我創建座位。我首先想到它有事情做與提交服用一段時間,所以我搬出來從CreateTables但具有相同的結果:
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);
}
}
我可以在正在創建的席位如預期,當我把我的「Table.Show()」正確的座椅的ID被打印出來到日誌:
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();
}
我也試過this.FragmentManager.ExecutePendingTransactions()
我創建的每個表後CreateSeats
沒有運氣了。