Я действительно не знаю, как задать этот вопрос, но я начну с идеи здесь.
Итак, у меня есть 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.