Google官方Fragment頁面框架Navigation和XPage開源框架的使用對比

xuexiangjys發表於2021-01-03

視訊介紹

https://www.bilibili.com/vide...

簡介

  • Navigation簡介

AndroidJetpack元件。Google官方對它的描述:

今天,我們宣佈推出Navigation元件,作為構建您的應用內介面的框架,重點是讓單 Activity 應用成為首選架構。利用Navigation元件對 Fragment 的原生支援,您可以獲得架構元件的所有好處(例如生命週期和 ViewModel),同時讓此元件為您處理 FragmentTransaction 的複雜性。此外,Navigation元件還可以讓您宣告我們為您處理的轉場。它可以自動構建正確的“向上”和“返回”行為,包含對深層連結的完整支援,並提供了幫助程式,用於將導航關聯到合適的 UI 小部件,例如抽屜式導航欄和底部導航。
  • XPage簡介

一個非常方便的fragment頁面框架,X-Library系列重要元件。設計的初衷是希望能做一個通用的Activity作為殼,Fragment作為頁面填充展示,並且能夠實現自由的切換和資料互動, 點選瞭解XPage更多內容.


特性對比

對位元性NavigationXPage
註冊方式XML註冊json或者@Page註冊
引數傳遞動態/靜態都支援動態/靜態都支援
頁面切換動畫動態支援動態/靜態都支援
容器佔位數支援多個佔位僅支援一個佔位
便捷性每次都需要編寫navigation導航無需重複性程式碼,一個@Page註解搞定
功能性強大,支援多種使用方式強大,提供多種常用元件和API
擴充性優秀,方便擴充因為追求便捷性,因此犧牲了部分擴充性
目標去除Activity去除Activity
生態AndroidJetpack全家桶,Google官方出品生態相對薄弱,但是也有X-Library系列支援

通過上面表格的對比可以看出,這兩個框架各有特色。

  • Navigation側重擴充性,適合中大型專案,方便專案的維護和擴充。
  • XPage側重便捷性,適合中小型專案,快速開發,尤其適合新手、學生黨和自由開發等獨立開發者。

使用對比

以下我僅從整合和頁面跳轉兩個方面進行簡單的使用比較,更多使用內容可以參閱本專案原始碼。專案地址: https://github.com/xuexiangjys/Navigation_XPage

整合

  • Navigation

由於是Google出品,所有非常方便,只需要你建立專案(New Project)的時候,選擇"Basic Activity"的選項,工程會自動幫你增加Navigation的依賴。如下圖:

在這裡插入圖片描述

如果你不想建立新的專案,也很簡單,只需要在專案中增加如下依賴:

dependencies {
    ...
    implementation 'androidx.navigation:navigation-fragment:2.3.0'
    implementation 'androidx.navigation:navigation-ui:2.3.0'
}
  • XPage

XPage的整合相對比較麻煩,不過相對也提供了一個模版工程,直接整合了XPage,拿到手就可以用了。

如果你想整合到自己的專案中,可以參考XPage整合指南

頁面跳轉

頁面跳轉的話,XPage就相對簡單多了。
  • Navigation

1.在res/navigation/中建立navigation導航圖。

在這裡插入圖片描述

2.在Activity的佈局中增加Fragment佔位容器。下面是使用NavHostFragment進行佔位。

<fragment
    android:id="@+id/nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:defaultNavHost="true"
    app:navGraph="@navigation/nav_graph" />

3.使用NavController進行頁面導航。

NavHostFragment.findNavController(FirstFragment.this)
        .navigate(R.id.action_FirstFragment_to_SecondFragment);
  • XPage

1.隨便建立一個類並繼承XPageFragment,然後在類上使用@Page進行註解

@Page
public class TestFragment extends XPageFragment {

...

}

2.然後在任意繼承了XPageActivity或者XPageFragment類中使用openPage即可。

// 使用類名開啟
openPage(TestFragment.class);
// 使用頁面識別符號開啟
openPage("TestFragment");

更多使用對比

更多使用內容可以參閱本專案原始碼, 專案地址: https://github.com/xuexiangjys/Navigation_XPage .

微信公眾號

更多資訊內容,歡迎掃描關注我的個人微信公眾號!
在這裡插入圖片描述

相關文章