You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android单Activity架构下如何使Fragment全屏显示

单Activity+Navigation实现全屏DetailsFragment(隐藏底部导航与替换Toolbar)

核心思路

利用Navigation的目的地监听控制视图显隐,同时在DetailsFragment中替换Activity的ActionBar为自身Toolbar,无需新建Activity即可满足需求。


1. 主Activity监听导航目的地,控制底部导航与Toolbar

在MainActivity中添加OnDestinationChangedListener,根据当前导航目的地动态切换底部导航和Activity自带Toolbar的显示状态:

class MainActivity : AppCompatActivity() {
    private lateinit var navController: NavController
    private lateinit var bottomNavView: BottomNavigationView
    private lateinit var activityToolbar: Toolbar

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        navController = findNavController(R.id.nav_host_fragment)
        bottomNavView = findViewById(R.id.bottom_nav)
        activityToolbar = findViewById(R.id.activity_toolbar)

        // 初始化Activity的Toolbar
        setSupportActionBar(activityToolbar)

        // 监听导航页面切换
        navController.addOnDestinationChangedListener { _, destination, _ ->
            when (destination.id) {
                R.id.detailsFragment -> {
                    // 进入详情页时隐藏底部导航和Activity Toolbar
                    bottomNavView.visibility = View.GONE
                    activityToolbar.visibility = View.GONE
                }
                else -> {
                    // 其他页面恢复显示
                    bottomNavView.visibility = View.VISIBLE
                    activityToolbar.visibility = View.VISIBLE
                }
            }
        }

        // 关联底部导航与Navigation组件
        bottomNavView.setupWithNavController(navController)
    }
}

2. 配置DetailsFragment的Toolbar,替换Activity的ActionBar

第一步:编写DetailsFragment布局

在fragment_details.xml中添加自定义Toolbar:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/details_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

    <!-- 详情内容区域 -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="详情内容展示"
        android:padding="16dp" />

</LinearLayout>

第二步:在DetailsFragment中设置Toolbar为ActionBar

class DetailsFragment : Fragment() {
    private lateinit var detailsToolbar: Toolbar
    private val navController by lazy { findNavController() }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_details, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        detailsToolbar = view.findViewById(R.id.details_toolbar)

        // 将当前Fragment的Toolbar设置为Activity的ActionBar
        (activity as AppCompatActivity).setSupportActionBar(detailsToolbar)
        // 显示返回按钮
        (activity as AppCompatActivity).supportActionBar?.setDisplayHomeAsUpEnabled(true)

        // 处理返回按钮点击事件
        detailsToolbar.setNavigationOnClickListener {
            navController.popBackStack()
        }
    }

    override fun onDestroyView() {
        super.onDestroyView()
        // 销毁Fragment时恢复Activity原Toolbar,避免影响其他页面
        val mainActivity = activity as MainActivity
        mainActivity.setSupportActionBar(mainActivity.activityToolbar)
        mainActivity.supportActionBar?.setDisplayHomeAsUpEnabled(false)
    }
}

3. 列表项跳转逻辑示例

在RecyclerView的Adapter中,通过Navigation组件跳转到DetailsFragment:

// 列表项点击事件
itemView.setOnClickListener {
    val directions = ListFragmentDirections.actionListFragmentToDetailsFragment(itemId)
    findNavController().navigate(directions)
}

内容的提问来源于stack exchange,提问作者DeKekem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:55:21