我想为更宽的屏幕使用多窗格布局。数据被持久化,SQL
每个片段都获取正确的数据。额外的布局 xml 文件位于资源目录文件夹中。(即 layout-w500dp)
但我有一些奇怪的行为。
它似乎只有在我选择某些东西然后按后退按钮后才起作用。
Atm 我最多使用两个 FrameLayouts 但后来我想用四个来做。我检查最深选择的级别并相应地分配片段。(这里只有 lvl 1,但后来我需要选择 lvl3)。
这是我想要实现的目标。
这被调用onCreate
并在进行选择时调用。
private void setScreens(){
int i = getLowestSelection();//returns 0 when nothing is selected.
//And 1 if selection is made in lvl1 ...
int p = 1;
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if (findViewById(R.id.fragtwo) != null) {
p = 2;
if (i == 1){
SectionsScreen secondFragment = new SectionsScreen();
transaction.replace(R.id.fragtwo,secondFragment);
}
}
if (findViewById(R.id.fragone) != null) {
if(p == 2){
if (i == 0 ){
StatuteScreen statuteScreenFragment = new StatuteScreen();
transaction.replace(R.id.fragone,statuteScreenFragment);
}
}
if (p == 1){
if (i == 0){
StatuteScreen statuteScreenFragment = new StatuteScreen();
transaction.replace(R.id.fragone,statuteScreenFragment);
}
else if (i == 1){
SectionsScreen sectionsScreenFragment = new SectionsScreen();
transaction.replace(R.id.fragone,sectionsScreenFragment);
}
}
}
transaction.addToBackStack(null);
transaction.commit();
}
只有当我执行以下操作时,它才有效。
- 启动应用程序 = 1 个纵向和横向片段(这是所需的行为)
- 在肖像中进行选择 = 没有任何反应!!!!(这里是问题)
- 切换到 Landscape = 2 Fragments 正确选择(正确的行为)
(如果我在横向中进行初始选择,我需要旋转到纵向并再次返回) - 切换到肖像 = LvL 2 具有正确数据的片段(正确的行为)
- 按返回按钮 = LvL 1 片段(正确的行为)
- 从现在开始,我可以在纵向和横向之间切换,并且我可以在所有方向上选择项目的正确行为。Even on backpress in landscape showing only one fragment with lvl 1 when selection is taken away.
为什么我会出现这种行为?
这首先是正确的方法吗?
考虑到我想将其扩展到更多级别和屏幕宽度!
IE:
backstack在这里能正常工作吗?如果有人需要更多信息,请说,我很乐意添加!