在我的活动中,我动态地添加了一个片段,它占据了屏幕的动态部分(您可以向上或向下滑动以覆盖整个屏幕或仅覆盖底部~250dp)。
我现在想要动态地将另一个片段添加到同一个活动中,但我需要这个新片段适合第一个片段。意思是你可以上下滑动第一个,但第二个将保持在第一个之后或移动以腾出空间。
谷歌告诉我使用相同的片段管理器并只添加一个片段,但是相同的片段管理器已经完成了提交(添加了第一个)。
有没有办法实现这个目标?谢谢!
CODE:
在我的活动onCreate中,我添加了一个名为buildingFragment(blue)的片段
fragmentTransaction = getFragmentManager().beginTransaction().add(R.id.fragment_container, buildingFragment, "BUILDINGPAGE");
fragmentTransaction.hide(buildingFragment);
fragmentTransaction.commit();
buildingFragment在onCreateView中设置动画,使其大部分内容都在屏幕外(底部方向):
// ANIMATE THE BUILDING PAGE TO PEAK FROM BOTTOM
ObjectAnimator anim = ObjectAnimator.ofFloat(buildingPageView, "y", USEABLE_HEIGHT, USEABLE_HEIGHT-TOOLBAR_HEIGHT-VIRT_NAV_BAR);
anim.setDuration(500);
anim.start();
现在这个BuildingFragment正常工作,它可以向上或向下滑动。 只需按一下按钮,我就想在活动中添加另一个细分(红色),但我需要它来占用BuildingFragment(蓝色)当前没有占用的屏幕上的其余空间。
当我滑动BuildingFragment(蓝色)时,我需要第二个碎片(红色)要么留在建筑碎片后面,要么只是通过向上或向下移动来腾出空间。无论哪种方式都可以接受。
以下是插图:
第二个问题: 如果我不想替换片段但是添加一个新片段,我怎样才能将旧片段放在新片段之上?
答案 0 :(得分:1)
检查this lib它可能对您有所帮助。
<com.sothree.slidinguppanel.SlidingUpPanelLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:sothree="http://schemas.android.com/apk/res-auto"
android:id="@+id/sliding_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
sothree:umanoPanelHeight="68dp"
sothree:umanoShadowHeight="4dp"
sothree:umanoParallaxOffset="100dp"
sothree:umanoDragView="@+id/dragView"
sothree:umanoOverlay="true"
sothree:umanoScrollableView="@+id/list">
<!-- MAIN CONTENT -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!--LOAD FIRST FRAGMENT-->
</FrameLayout>
<!-- SLIDING LAYOUT -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!--LOAD SECOND FRAGMENT-->
</FrameLayout>
</com.sothree.slidinguppanel.SlidingUpPanelLayout>
答案 1 :(得分:0)
你可以在FragmentManager上进行多次提交,BTW只有FragmentManager
的一个实例getFragmentManager()
在每次调用时返回。您可以随时向任何视图添加片段。
因此,即使您添加了片段,也可以将相同的片段再次添加到视图中。
它只是Fragment的另一个实例,可以作为一个孤立的实体工作。