我想在我的应用程序中实现单活动多片段设计。我计划有几个“屏幕”(片段的布局),我将在代码中切换(可能添加到后台堆栈)。
据我了解,每个屏幕中片段的布局是使用布局对象(例如 FrameLayout)设置的,该对象充当片段的占位符(共享相同的 ID)。由于不同的屏幕有不同的片段排列(一个可能是 FrameLayout,另一个可能是 LinearLayout 等),我想知道:如何在运行时在片段布局之间切换?
我了解添加/替换片段(通过 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();
}
}
为了切换到不同的布局,您可以删除片段并将它们添加到其他位置。
让我知道事情的后续。
编辑:澄清一下,视图和视图组不需要实例化一次,然后在活动的生命周期中保留。只需确保在删除相关视图之前删除或分离所有片段即可。另外,如果您在 onCreate 之外创建和删除视图,您应该确保可以通过使用 onSaveInstanceState 并在 onCreate 中重复该过程来恢复它。阅读图表在这里 http://d.android.com/reference/android/app/Activity.html和关于的段落配置更改 http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)