我的 Android 项目中只有一个 Activity,我想在不同的片段中显示不同类型的菜单
I have only a Single Activity in my Android Project and I want to show different type of Menu in different Fragment
我的Android项目只实现了一个activity,其他都是Fragments。因此,例如我有 5 个片段,我希望其中 3 个具有 BottomNavigation
菜单,而另外 2 个具有 TabLayout
菜单。我怎样才能做到这一点?我看到有人说创建一个 Interface
并让我的 MainActivity
实现 Interface
,然后从 Fragment 到 Interface
对 Activity 进行更改。这是最好的choice/practice吗?还有哪些其他选项可用,哪个选项最好?
你可以尝试使用Jetpack Navigation组件来实现,会更容易处理。
不需要接口来处理这个用例。您可以在 Activity 中创建两个视图,并在创建新片段时简单地设置可见性。 view.visibility = View.VISIBLE
view.visibility = View.GONE
.
解决方案一:
首先,在我的 MainActivity
中创建一个函数。下面以我的项目代码为例。我以编程方式修改了布局,所有内容都写在这个 showTabLayoutUI()
函数中。
fun showTabLayoutUI() {
Log.d(TAG, "showTabLayoutUI: initiated")
infix fun View.below(view:View) {
var layoutParam = this.layoutParams as? RelativeLayout.LayoutParams
layoutParam?.addRule(RelativeLayout.BELOW, view.id)
layoutParam?.removeRule(RelativeLayout.ALIGN_PARENT_TOP)
}
binding.bottomNav.visibility = View.GONE //Hide Bottom Nav
binding.sellerSiteActionBarRl.visibility = View.VISIBLE //Show Action Bar
binding.sellerSiteTl.visibility = View.VISIBLE //Show Tab Layout
binding.fragmentContainerView.below(binding.sellerSiteTl)
}
然后在我的 Fragment
中,我使用以下代码调用 MainActivity
中的方法:
(activity as MainActivity?)!!.showTabLayoutUI()
然后它将隐藏 bottomNav 并显示 TabLayout。
方案二:
如果使用了 Navigation Component,那么在您的 MainActivity
中,您可以通过键入以下内容来检查当前正在显示的 Fragment:
navController.addOnDestinationChangedListener{_, destiantion, _ ->
if(destination.id == R.id.fragmentOne) {
//display BottomNavigation
} else if (destination.id == R.id.fragmentTwo) {
//display TabLayout
}
我的Android项目只实现了一个activity,其他都是Fragments。因此,例如我有 5 个片段,我希望其中 3 个具有 BottomNavigation
菜单,而另外 2 个具有 TabLayout
菜单。我怎样才能做到这一点?我看到有人说创建一个 Interface
并让我的 MainActivity
实现 Interface
,然后从 Fragment 到 Interface
对 Activity 进行更改。这是最好的choice/practice吗?还有哪些其他选项可用,哪个选项最好?
你可以尝试使用Jetpack Navigation组件来实现,会更容易处理。
不需要接口来处理这个用例。您可以在 Activity 中创建两个视图,并在创建新片段时简单地设置可见性。 view.visibility = View.VISIBLE
view.visibility = View.GONE
.
解决方案一:
首先,在我的 MainActivity
中创建一个函数。下面以我的项目代码为例。我以编程方式修改了布局,所有内容都写在这个 showTabLayoutUI()
函数中。
fun showTabLayoutUI() {
Log.d(TAG, "showTabLayoutUI: initiated")
infix fun View.below(view:View) {
var layoutParam = this.layoutParams as? RelativeLayout.LayoutParams
layoutParam?.addRule(RelativeLayout.BELOW, view.id)
layoutParam?.removeRule(RelativeLayout.ALIGN_PARENT_TOP)
}
binding.bottomNav.visibility = View.GONE //Hide Bottom Nav
binding.sellerSiteActionBarRl.visibility = View.VISIBLE //Show Action Bar
binding.sellerSiteTl.visibility = View.VISIBLE //Show Tab Layout
binding.fragmentContainerView.below(binding.sellerSiteTl)
}
然后在我的 Fragment
中,我使用以下代码调用 MainActivity
中的方法:
(activity as MainActivity?)!!.showTabLayoutUI()
然后它将隐藏 bottomNav 并显示 TabLayout。
方案二:
如果使用了 Navigation Component,那么在您的 MainActivity
中,您可以通过键入以下内容来检查当前正在显示的 Fragment:
navController.addOnDestinationChangedListener{_, destiantion, _ ->
if(destination.id == R.id.fragmentOne) {
//display BottomNavigation
} else if (destination.id == R.id.fragmentTwo) {
//display TabLayout
}