あなたがする必要があるのは、独自のIDを生成することだけです。 IDは何でもかまいませんが、aapt ID(Rのもの)と競合してはならないし、否定的であってはいけません。
次の例では、固定IDのセットでこれを示しています。
public class MainActivity extends Activity {
private final int ID_TABLE = 0xA;
private final int ID_ROW1 = 0xB;
private final int ID_ROW2 = 0xC;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout ll = (LinearLayout) findViewById(R.id.root);
TableLayout tl = new TableLayout(this);
tl.setId(ID_TABLE);
TableRow tr1 = new TableRow(this);
tr1.setId(ID_ROW1);
TableRow tr2 = new TableRow(this);
tr2.setId(ID_ROW2);
tl.addView(tr1);
tl.addView(tr2);
ll.addView(tl);
MyFragment frag1 = new MyFragment();
MyFragment frag2 = new MyFragment();
MyFragment frag3 = new MyFragment();
MyFragment frag4 = new MyFragment();
getFragmentManager().beginTransaction()
.add(ID_ROW1, frag1, "cell1_1")
.add(ID_ROW1, frag2, "cell1_2")
.add(ID_ROW2, frag3, "cell2_1")
.add(ID_ROW2, frag4, "cell2_2")
.commit();
getFragmentManager().executePendingTransactions();
}
}
別のレイアウトに切り替えるためには、あなたはフラグメントを除去し、他の場所でそれらを追加することができます。
どうすればいいか教えてください。
EDIT:明確にするために、ビューとビューグループを一度インスタンス化してから、アクティビティの存続期間中保持する必要はありません。関連するビューを削除する前に、フラグメントが削除または切り離されていることを確認してください。また、onCreateの外でビューを作成して削除する場合は、onSaveInstanceStateを使用してonCreateでそのプロセスを繰り返すことで、ビューを復元できることを確認する必要があります。 diagram hereと約configuration changesの段落を読んでください。
ここにシングルアクティビティマルチフラグメントコードを掲載しました:http://stackoverflow.com/questions/7797389/how-avoid-re-initializing-activity-that-takes-a-long-time-to-initilize/ 7799391#7799391 – user999717
迅速な対応をありがとうございます。しかし、私はあなたの例のような同じレイアウトのフラグメント間を切り替えると( 'R.id.mainframe')、フラグメントのレイアウトを切り替える方法である私の問題は解決しないと思います。特に、レイアウトがコードで作成されている場合(onContentViewが呼び出された後)、私の場合と同様です。 – DannyA
ああ、私は、再インスタンス化せずに既存のフラグメントを再親和したいと思いますか?それは面白い。 – user999717