Общение между фрагментами и макетами - PullRequest
0 голосов
/ 25 ноября 2018

Я действительно не знаю, как задать этот вопрос, но я начну с идеи здесь.

Итак, у меня есть MainFragment, который содержит SlidingUpPanelLayout, который включает в себя пейджер и макет, который содержит элементы управления для приложения.

И то, что я хочу сделать, это когда я переключаюсь между фрагментами в tablayout, я хочу изменить макет, который содержит элементы управления, я также хочу запускать функции из фрагмента с элементами управления на разных моих фрагментахв окне просмотра.

Но так как они находятся в разных фрагментах, я не знаю, как заставить макеты элементов управления и кнопки изменить их и удержать их.

Итак, вот первыйизображение макета: https://imgur.com/a/SgdI21L

А вот как выглядит мой следующий XML: XML для управляющего содержимого:

<LinearLayout android:id="@+id/control"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000"
android:clickable="false"
android:gravity="center|top"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<android.support.design.widget.TabLayout
    android:id="@+id/tabLayout"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:background="@color/controlBackground"
    app:tabGravity="fill"
    app:tabIndicatorColor="@color/colorText"
    app:tabMode="scrollable"
    app:tabSelectedTextColor="@color/colorAccent"
    app:tabTextColor="@color/colorText">
</android.support.design.widget.TabLayout>

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/takePicture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center|center_vertical"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="10dp"
        android:backgroundTint="@color/colorText"
        android:clickable="true" />

    <ImageButton
        android:id="@+id/flipCamera"
        style="@android:style/Widget.Material.Button.Borderless"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center|left"
        android:padding="20dp"
        android:clickable="true"
        android:tint="@color/colorText"
        android:backgroundTint="@color/colorText"
        android:src="@drawable/ic_outline_camera_front_24px" />

    <de.hdodenhof.circleimageview.CircleImageView
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/openGallery"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_gravity="center|right"
        android:padding="20dp"
        android:src="@drawable/fox"
        android:clickable="true"
        app:civ_border_color="#FF000000"
        app:civ_border_width="2dp" />

</android.support.design.widget.CoordinatorLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center|top"
            android:padding="10dp"
            android:text="Pete is king!"
            android:layout_gravity="center"
            android:textColor="@color/colorText"
            android:textSize="16sp" />

        <ImageButton
            android:id="@+id/info"
            style="@android:style/Widget.Material.Button.Borderless"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|end"
            android:layout_weight="1"
            android:padding="20dp"
            android:clickable="true"
            android:backgroundTint="@color/colorAccent"
            android:tint="@color/colorAccent"
            android:src="@drawable/ic_shutterowl_24dp" />

    </LinearLayout>
</LinearLayout>

А вот мой просмотрщик:

<android.support.v4.view.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <owlapps.shutterowl.AutoFitTextureView
        android:id="@+id/texture"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_toEndOf="@+id/control"
        xmlns:android="http://schemas.android.com/apk/res/android" />
</android.support.v4.view.ViewPager>

Все они отображаются вместе в SlideUpPanelLayout следующим образом:

<com.sothree.slidinguppanel.SlidingUpPanelLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/sliding_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
xmlns:sothree="http://schemas.android.com/apk/res-auto"
sothree:layout_constraintHeight_max="80dp"
sothree:umanoPanelHeight="120dp"
sothree:umanoShadowHeight="0dp"
sothree:umanoOverlay="true">

<include layout="@layout/camera_content"/>

<include layout="@layout/control_content"/>


</com.sothree.slidinguppanel.SlidingUpPanelLayout>

У меня была идея решить эту проблему с помощью интерфейса, который мог бы запускать функции из MainFragment, загружающие макеты камеры и содержимого, здесьвот что я попробовал:

В событии щелчка от основного фрагмента: Tab1Fragment.take.visible (true);

Мой интерфейс выглядит так:

public interface CameraControlListener {
void visible(boolean status);
}

И реализован во фрагменте Tab1Fragment, который содержит вид с камеры:

@Override
public void visible(boolean status) {
    if(status){
        takePicture();
    }
}

Так как я могу заставить все это говорить друг с другом?Когда я перемещаюсь между фрагментами, я хочу, чтобы элементы управления менялись внутри другого фрагмента, а также вызывали функции из активного tabfragment в viewpager.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...