2016-04-13 5 views
1

В моей деятельности Я динамически представляю фрагмент, который занимает динамическую порцию экрана (вы можете перемещать его вверх или вниз, чтобы покрыть весь экран или только дно ~ 250 дп).Установка второго фрагмента на активность

Теперь я хочу динамически добавить другой фрагмент в одну и ту же активность, но мне нужен этот новый фрагмент, чтобы он соответствовал первому. Это означает, что вы можете сдвинуть первый, все еще вверх и вниз, но второй будет либо оставаться позади первого, либо двигаться, чтобы освободить место.

Google предлагает мне использовать тот же менеджер фрагментов и просто добавить фрагмент, но тот же менеджер фрагментов уже совершил фиксацию (с добавлением первого).

Есть ли способ достичь этого? Спасибо!

КОД:

В моей деятельности OnCreate я добавил фрагмент под названием buildingFragment (синий)

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

Второй вопрос: Если я не хочу, чтобы заменить фрагменты, но добавить новую, как я могу принести старший фрагмент поверх новое?

+0

Дайте часть фрагмента кода, который вы пробовали. Нам будет намного легче понять вашу проблему. – chandil03

+0

Спасибо, добавленный код и иллюстрация – KasparTr

ответ

1

Check 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> 
+0

Спасибо за lib. Это то, что я уже построил. Сдвижная панель работает. Вопрос скорее состоит в том, как мне сопоставить два фрагмента внутри действия. Или, если это невозможно, как перенести первый фрагмент поверх второго. – KasparTr

+0

Добавьте двухпозиционный держатель в обе панели и загрузите фрагмент на место владельца из активности. –

+0

Прошу прощения, пожалуйста, укажите – KasparTr

0

Вы можете сделать совершить столько раз, сколько вы хотите на FragmentManager, кстати есть только один экземпляр FragmentManager что getFragmentManager() возвращается на каждом вызове. Вы можете добавить фрагмент к любому виду без каких-либо раз.

Таким образом, даже если вы добавили фрагмент, вы можете снова добавить тот же фрагмент к представлению.

Это не что иное, как еще один экземпляр фрагмента, который будет работать как изолированный объект.

+0

Хорошо, но тогда сам андроид придумывает, как вставить эти фрагменты в представление? Потому что сейчас он просто помещает второй фрагмент поверх первого. – KasparTr

+0

Нет, вам нужно указать, где должен выглядеть этот фрагмент. – chandil03

+0

Если вы добавите фрагмент, тот же вид, где u добавлен предыдущий, в том же случае, что и вы делаете, это зависит от Parentview. Например: В LinearLayout оба фрагмента будут появляться рядом. В Relativelayout Next будет перекрываться предыдущий. как это. – chandil03

Смежные вопросы