Dan*_*nyA 8 android android-layout android-fragments
我想在我的应用程序中实现单活动多碎片设计.我计划在代码中切换几个"屏幕"(片段的布局),我可以在它们之间切换(可能添加到后台堆栈).
据我所知,每个屏幕中片段的布局是使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
为了切换到不同的布局,您可以删除片段并将它们添加到其他位置。
让我知道事情的后续。
编辑:澄清一下,视图和视图组不需要实例化一次,然后在活动的生命周期中保留。只需确保在删除相关视图之前删除或分离所有片段即可。另外,如果您在 onCreate 之外创建和删除视图,您应该确保可以通过使用 onSaveInstanceState 并在 onCreate 中重复该过程来恢复它。请阅读此处的图表和有关配置更改的段落。
| 归档时间: |
|
| 查看次数: |
16810 次 |
| 最近记录: |