視訊介紹
https://www.bilibili.com/vide...
簡介
- Navigation簡介
AndroidJetpack元件。Google官方對它的描述:
今天,我們宣佈推出Navigation元件,作為構建您的應用內介面的框架,重點是讓單 Activity 應用成為首選架構
。利用Navigation元件對 Fragment 的原生支援,您可以獲得架構元件的所有好處(例如生命週期和 ViewModel),同時讓此元件為您處理 FragmentTransaction 的複雜性。此外,Navigation元件還可以讓您宣告我們為您處理的轉場。它可以自動構建正確的“向上”和“返回”行為,包含對深層連結的完整支援,並提供了幫助程式,用於將導航關聯到合適的 UI 小部件,例如抽屜式導航欄和底部導航。
- XPage簡介
一個非常方便的fragment頁面框架,X-Library系列重要元件。設計的初衷是希望能做一個通用的Activity作為殼,Fragment作為頁面填充展示,並且能夠實現自由的切換和資料互動, 點選瞭解XPage更多內容.
特性對比
對位元性 | Navigation | XPage |
---|---|---|
註冊方式 | 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 .
微信公眾號
更多資訊內容,歡迎掃描關注我的個人微信公眾號!