将第二个片段拟合到一个活动

时间:2016-04-13 09:31:27

标签: android android-fragments

在我的活动中,我动态地添加了一个片段,它占据了屏幕的动态部分(您可以向上或向下滑动以覆盖整个屏幕或仅覆盖底部~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(蓝色)时,我需要第二个碎片(红色)要么留在建筑碎片后面,要么只是通过向上或向下移动来腾出空间。无论哪种方式都可以接受。

以下是插图:

enter image description here

第二个问题: 如果我不想替换片段但是添加一个新片段,我怎样才能将旧片段放在新片段之上?

2 个答案:

答案 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的另一个实例,可以作为一个孤立的实体工作。