Session
というアクティビティがあり、異なるテーブルが表示され、各テーブルのボタンをクリックすると、Seats
が表示されますが、最初のテーブルにのみ表示されます。最初のフラグメントのみが正しく描画されます
セッションにはTable Fragments
のリストが含まれ、各テーブルにはSeat Fragments
のリストが含まれています。すべてのテーブル上の
[Activity] Session
[List<TableFragment>] Tables
[List<SeatFragment>] Seats
期待される結果:私は、空のテーブルが作成されSession
アクティビティを入力したときにも
:それは最初のテーブルを除くすべてのテーブルの上にどのように見えるか
"Table Name"と "Seats"はSeat Fragment
で設定された名前が奇妙です。 "テーブル名"はレイアウトファイルから取った変数なので大丈夫ですが、ボタンはプログラマチックに作成されるので、 "空"の部分には入れないようにしてください。 "テーブル名"のテキストは、すべて異なるTable Fragments
に正しく表示されているので、私はSeat Fragments
を作成しているときと何か関係があるとは確信していますが、それが何であるか分かりません。すべてのタグは異なり、最初のテーブルは魅力のように機能します。
Session
私はテーブルを作成すると同時にシートを作成する方法があります。
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);
}
}
私はそれをすることができます私は最初、それは私がCreateTablesからそれを移動しますが、同じ結果といくつかの時間を割いコミットとは何かを持っていたと思いました座席は期待通りに作成されていると私は私の「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();
}
私は各テーブルを作成し、運とCreateSeats
前にした後、私はまた、this.FragmentManager.ExecutePendingTransactions()
を試してみました。