在片段和布局之间进行交流

时间:2018-11-25 13:13:17

标签: android android-layout android-fragments

我真的不知道如何问这个问题,但是我将从这里的想法开始。

所以我有一个MainFragment,其中包含一个SlidingUpPanelLayout,其中包括一个viewpager和一个用于容纳应用程序控件的布局。

我想做的是,当我在TabLayout中的各个片段之间切换时,我想更改用于保存控件的布局,我也想触发片段中的函数,并且控件位于Viewpager中不同片段上

但是由于它们位于不同的片段中,所以我不知道如何获取控件布局和按钮以进行更改并获取它们。

因此,这里首先是布局的图像: 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>

这是我的viewpager:

<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加载相机和内容布局的功能,这是我尝试过的:

在主要部件的click事件中:Tab1Fragment.take.visible(true);

我的界面如下:

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

并在保存相机视图的Tab1Fragment中实现:

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

那么我如何让所有这些彼此交谈? 当我在片段之间移动时,我希望更改另一个片段内的控件,并触发Viewpager中活动选项卡片段的功能。

0 个答案:

没有答案