Navigation

簡介

navigation(導(dǎo)航)一般應(yīng)用在一個(gè)主Activity和多個(gè)Fragment的情景中。在具有多個(gè) Activity 目的地的應(yīng)用中,每個(gè) Activity 均擁有其自己的導(dǎo)航圖。

導(dǎo)航組件由以下三個(gè)關(guān)鍵部分組成:

  • 導(dǎo)航圖:一個(gè)包含所有導(dǎo)航相關(guān)信息的 XML 資源。這包括應(yīng)用內(nèi)所有目的地和路徑。
  • NavHost:用于顯示導(dǎo)航圖中目的地的空白容器,在Activity布局中配置實(shí)現(xiàn)。導(dǎo)航組件包含一個(gè)默認(rèn) NavHost 實(shí)現(xiàn) (NavHostFragment),可顯示 Fragment 目的地。
  • NavController:在 NavHost 中管理應(yīng)用導(dǎo)航的對象。當(dāng)用戶在整個(gè)應(yīng)用中移動時(shí),NavController 會安排 NavHost 中目的地的交換。

在應(yīng)用中導(dǎo)航時(shí),您告訴 NavController,您想沿導(dǎo)航圖中的特定路徑導(dǎo)航至特定目標(biāo),或直接導(dǎo)航至特定目標(biāo)。NavController 便會在 NavHost 中顯示相應(yīng)目標(biāo)。

嵌套圖表、全局操作

目的地之間傳遞數(shù)據(jù)

首先在接收參數(shù)的目的地中設(shè)置參數(shù)類型、名稱:

  • 接收的Fragment中設(shè)置參數(shù),負(fù)責(zé)接收
<fragment
            android:id="@+id/firstFragment"
            android:name="com.futuring.jetpackdemo.FirstFragment"
            android:label="FirstFragment">
            <argument
                android:name="EMAIL"
                android:defaultValue="2005@qq.com"
                app:argType="string" />
            <action
                android:id="@+id/action_firstFragment_to_thirdFragment"
                app:destination="@id/thirdFragment" />
        </fragment>

??
之后在路徑(action)中設(shè)置參數(shù)類型:

  • action中附加參數(shù),實(shí)現(xiàn)傳遞參數(shù)的功能
        <action
            android:id="@+id/action_mainFragment_to_navigation"
            app:destination="@id/firstFragment">

            <argument
                android:name="EMAIL"
                android:defaultValue="2005@qq.com"
                app:argType="string" />

        </action>

Safe Args

Navigation 組件具有一個(gè)名為 Safe Args 的 Gradle 插件,該插件可以生成簡單的 object 和 builder 類,以便以類型安全的方式瀏覽和訪問任何關(guān)聯(lián)的參數(shù)。強(qiáng)烈建議將 Safe Args 用于導(dǎo)航和數(shù)據(jù)傳遞,因?yàn)樗梢源_保類型安全

啟用Safe Args后,會自動生成一些代碼。生成的代碼會為每個(gè)源目的地、接收目的地以及每個(gè)操作,生成以下類型安全的類和方法。

  • 為生成操作的每一個(gè)源目的地創(chuàng)建一個(gè)類。該類的名稱是在源目的地的名稱后面加上“Directions”。例如,如果源目的地是名為 SpecifyAmountFragment 的 Fragment,則生成的類的名稱為 SpecifyAmountFragmentDirections。該類會為源目的地中定義的每個(gè)操作提供一個(gè)方法。

  • 對于用于傳遞參數(shù)的每個(gè)操作,都會創(chuàng)建一個(gè)內(nèi)部類,該類的名稱根據(jù)操作的名稱確定。例如,如果操作名稱為 action_mainFragment_to_secondFragment,,則類名稱為 ActionMainFragmentToNavigation(也不一定)。如果您的操作包含不帶 defaultValue 的參數(shù),則您可以使用關(guān)聯(lián)的 action 類來設(shè)置參數(shù)值。

  • 接收目的地創(chuàng)建一個(gè)類。該類的名稱是在目的地的名稱后面加上“Args”。例如,如果目的地 Fragment 的名稱為 ConfirmationFragment,,則生成的類的名稱為 ConfirmationFragmentArgs??梢允褂迷擃惖?fromBundle() 方法檢索參數(shù)。

MainFragmentDirections.ActionMainFragmentToNavigation action = MainFragmentDirections
                .actionMainFragmentToNavigation().setEMAIL("@qq.com");
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容