我真的不知道如何问这个问题,但是我将从这里的想法开始。
所以我有一个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中活动选项卡片段的功能。