Android官方架构组件Navigation:大巧不工的Fragment管理框架

<?xml version="1.0" encoding="utf-8"?><navigation xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    app:startDestination="@id/page1Fragment">    <fragment        android:id="@+id/page1Fragment"        android:name="com.qingmei2.samplejetpack.ui.main.MainPage1Fragment"        android:label="fragment_page1"        tools:layout="@layout/fragment_main_page1">        <action            android:id="@+id/action_page2"            app:destination="@id/page2Fragment" />    </fragment>    <fragment        android:id="@+id/page2Fragment"        android:name="com.qingmei2.samplejetpack.ui.main.MainPage2Fragment"        android:label="fragment_page2"        tools:layout="@layout/fragment_main_page2">        <action            android:id="@+id/action_page1"            app:popUpTo="@id/page1Fragment" />        <action            android:id="@+id/action_page3"            app:destination="@id/nav_graph_page3" />    </fragment>    <navigation        android:id="@+id/nav_graph_page3"        app:startDestination="@id/page3Fragment">        <fragment            android:id="@+id/page3Fragment"            android:name="com.qingmei2.samplejetpack.ui.main.MainPage3Fragment"            android:label="fragment_page3"            tools:layout="@layout/fragment_main_page3" />    </navigation></navigation>

注意:请保证fragment标签下,android:name属性内包名的正确声明。

⑤ 编辑MainActivity

在Activity中配置 Navigation 非常简单,我们首先编辑Activity的布局文件,并在布局文件中添加一个 NavHostFragment :

<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/container"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity">    <fragment        android:id="@+id/my_nav_host_fragment"        android:name="androidx.navigation.fragment.NavHostFragment"        android:layout_width="0dp"        android:layout_height="0dp"        app:layout_constraintBottom_toBottomOf="parent"        app:layout_constraintLeft_toLeftOf="parent"        app:layout_constraintRight_toRightOf="parent"        app:layout_constraintTop_toTopOf="parent"        app:defaultNavHost="true"        app:navGraph="@navigation/nav_graph_main" /></android.support.constraint.ConstraintLayout>

这是一个宽和高都 match_parent 的Fragment,它的作用就是 导航界面的容器

这并不难以理解,我们需要在Activity中通过 Navigation 展示一系列的Fragment,但是我们需要告诉Navigation 和Activity,这一系列的 Fragment  展示在哪——NavHostFragment应运而生,我把它的作用归纳为 导航界面的容器

这之后,在Activity中添加如下代码:

class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)    }    override fun onSupportNavigateUp() =            findNavController(this, R.id.my_nav_host_fragment).navigateUp()}

onSupportNavigateUp()方法的重写,意味着Activity将它的 back键点击事件的委托出去,如果当前并非栈中顶部的Fragment, 那么点击back键,返回上一个Fragment。

⑥ 最后,配置不同Fragment对应的跳转事件

class MainPage1Fragment : Fragment() {     //隐藏了onCreateView()方法的实现,下同    override fun onViewCreated(view: View, savedInstanceState: Bundle?) { &nbs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值