Android – 在运行时更改片段布局

我想在我的应用程序中实现单活动多碎片设计。 我计划在代码中切换几个“屏幕”(片段的布局),我可以在它们之间切换(可能添加到后台)。

根据我的理解,每个屏幕中片段的布局是使用Layout对象(例如FrameLayout)设置的,它们充当片段的占位符(共享相同的ID)。 由于不同的屏幕有不同的片段排列(一个可能是FrameLayout,另一个是LinearLayout等),我想知道:如何在运行时切换片段的布局?

我理解添加/替换Fragments(通过FragmentManager),但我想在实时活动中完全添加包含它们的新布局。 有点像为“setContentView”进行交易……

我该怎么做呢? 谢谢! 丹尼。

这当然是可能的,您唯一需要做的就是生成自己的ID。 ID可以是任何内容,但它们不得与aapt ID(R中的ID)冲突,并且不得为负。

以下示例使用一组固定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(); } } 

要切换到不同的布局,您可以删除片段并将其添加到其他位置。
让我知道事情的后续。

编辑:澄清,视图和ViewGroup不需要实例化一次,然后保持活动的生命周期。 只需确保在删除相关视图之前删除或分离任何片段。 此外,如果您创建和删除onCreate之外的视图,您应该确保可以使用onSaveInstanceState并在onCreate中重复该过程来恢复它。 阅读此处的图表和有关配置更改的段落。