Android,片段事务的奇怪行为replace()

时间:2013-06-23 13:39:18

标签: java android android-fragments android-fragmentactivity android-framelayout

我想在更宽的屏幕上使用多窗格布局。数据以SQL保留,每个片段都会获取正确的数据。额外的布局xml文件位于资源目​​录文件夹中。(即layout-w500dp)
但我有一些奇怪的行为。
在我选择了某些内容之后似乎只能工作,然后按后退按钮。
Atm我使用最多两个FrameLayouts但后来我想用四个来做。 我检查最深选择的级别并相应地分配片段。 (这里只有lvl 1,但后来我需要选择lvl3)。
这是我想要实现的目标。

image 1

这会在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. 以纵向和横向方式启动应用程序= 1个片段(这是所需的行为)
  2. 在肖像中进行选择=没有任何反应!!!! (这是问题)
  3. 切换到横向= 2具有正确选择的碎片(正确行为)
    (如果我在横向中进行初始选择,我需要旋转到纵向并再次返回)
  4. 切换到Portrait = LvL 2 Fragment with right Data(正确行为)
  5. 按Back Button = LvL 1 Fragment(右行为)
  6. 从现在开始,我可以在纵向和横向之间切换,我可以选择适合所有方向的项目。即使在横向拍摄中,当选择被取走时,只显示一个带有lvl 1的片段。
  7. 为什么我会出现这种行为?
    这是第一个正确的方法吗?
    考虑到我想将其扩展到更多级别和screenWidths!
    即:

    image2

    这里会正确地进行后备功能吗?如果有人需要其他信息,请说出来,我很乐意添加它!

1 个答案:

答案 0 :(得分:0)

愚蠢的错误。我将选择保存在应用程序类中,并在onCreate中实例化,但我需要在getLowestSelection()方法中获取当前选择之前进行实例化