如何在 Kotlin 的 Fragment 中隐藏属于 Activity 的 FloatingActionButton?
How to hide the FloatingActionButton that is part of the Activity in the Fragment in Kotlin?
在我的 'HomeActivity' 中,我有一个 FloatingActionButton
和四个 Fragments
。我希望 FloatingActionButton
仅在 'fragment1' 和 'fragment2' 中显示,使其隐藏在 'fragment3' 和 'fragment4' 中。我试过了,但没有用。
以下是我在 'HomeActivity'
的 xml
文件中的内容
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.bottomappbar.BottomAppBar
android:id="@+id/bottom_appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom">
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginEnd="16dp"
android:background="@android:color/transparent"
app:menu="@menu/bottom_nav_menu" />
</com.google.android.material.bottomappbar.BottomAppBar>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_hide_category"
app:layout_anchor="@id/bottom_appbar"/>
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="50dp"
app:defaultNavHost="true"
app:navGraph="@navigation/mobile_navigation"
app:layout_anchor="@id/bottom_appbar"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
我在 'HomeActivity'
中添加了以下代码
fun hideFabOne(){
binding.fabOne.hide()
}
和下面 fragment
的 onCreateView
中我想隐藏 FAB 的代码。但是,它没有用。
HomeActivity().hideFabOne()
看起来您正在创建 activity 的新实例,试试
(requireActivity() as HomeActivity).hideFabOne()
*添加评论
您可以修改 hideFabOne()
类似
fun hideFabOne(){
binding.fabOne.visiblity = if( binding.fabOne.isVisible ) View.VISIBLE else View.GONE
}
在我的 'HomeActivity' 中,我有一个 FloatingActionButton
和四个 Fragments
。我希望 FloatingActionButton
仅在 'fragment1' 和 'fragment2' 中显示,使其隐藏在 'fragment3' 和 'fragment4' 中。我试过了,但没有用。
以下是我在 'HomeActivity'
的xml
文件中的内容
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.bottomappbar.BottomAppBar
android:id="@+id/bottom_appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom">
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginEnd="16dp"
android:background="@android:color/transparent"
app:menu="@menu/bottom_nav_menu" />
</com.google.android.material.bottomappbar.BottomAppBar>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_hide_category"
app:layout_anchor="@id/bottom_appbar"/>
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="50dp"
app:defaultNavHost="true"
app:navGraph="@navigation/mobile_navigation"
app:layout_anchor="@id/bottom_appbar"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
我在 'HomeActivity'
中添加了以下代码fun hideFabOne(){
binding.fabOne.hide()
}
和下面 fragment
的 onCreateView
中我想隐藏 FAB 的代码。但是,它没有用。
HomeActivity().hideFabOne()
看起来您正在创建 activity 的新实例,试试
(requireActivity() as HomeActivity).hideFabOne()
*添加评论
您可以修改 hideFabOne()
类似
fun hideFabOne(){
binding.fabOne.visiblity = if( binding.fabOne.isVisible ) View.VISIBLE else View.GONE
}