我希望有一个Activity可以在两个片段之间上下滑动,它们之间的句柄中有一个按钮。为此,我有两个FrameLayout容器,一个在XML中声明,在Linear布局中有一个权重1,然后按钮在容器之后是一个固定的高度,如下所示:
红色部分是第一个片段的容器。然后,我想以编程方式为屏幕下方的片段2添加另一个片段容器,该容器与测量的片段容器1的高度完全相同。所以我用:
containerAdmin.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
fragmentHeight = containerAdmin.getHeight();
instantiateFragments();
}
});
这很好用,然后我捕获活动的触摸事件并在触摸事件上移动所有容器的y值,以便用户可以向上滚动这些容器,如下图所示:
这很好用,你可以看到片段2的蓝色容器显示正确的高度。现在我有两个容器(FrameLayout)的正确大小并正确放置,我使用FragmentTransaction添加片段,如下所示:
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.admin_container, new AdminFragment());
transaction.add(R.id.client_container, new ClientFragment());
transaction.commit();
令我惊讶的是,第二个FrameLayout容器成功并按预期获取片段,但是第一个容器(我用全局布局测量的容器)不在那里。我甚至从ADM中提取了XML UI规范并检查了UI层次结构,第一个片段“AdminFragment”根本不存在,而“ClientFragment”正确呈现。我给容器着色,以确保它们实际上是正确充气和可见的。我甚至试图打电话
getFragmentManager().executePendingTransactions();
交易后没有成功。有任何想法吗?如果我能进一步详细说明这个问题,或者你认为我应该采取不同的方法,请告诉我。