我的 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组件来实现,会更容易处理。

Check the official document

不需要接口来处理这个用例。您可以在 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
    }