簡介xpage是乙個非常方便的fragment頁面框架!天下武功,唯快不破,xpage最大的特點就是快,提高開發的效率!
xpage設計的初衷是希望能做乙個通用的activity作為殼,fragment作為頁面填充展示,並且能夠像activity那樣自由的切換和資料互動。
設計原由
當初做android開發時每當我寫乙個頁面,都需要建立乙個activity,並且還需要在manifest中註冊一堆activity資訊,這樣既不方便,而且對資源的開銷也比較大。因此當時我就設想能否創造出乙個通用萬能的activity容器,可以全權負責fragment的切換展示和資料互動,只需要一行**即可完成所有的操作,還不需要自己手動去註冊,可以一鍵生成。
設計思路
剛開始的時候真的很難,沒有什麼好的思路,最初只是簡單封裝了乙個activity,通過傳入一些key值從而獲取並載入對應的fragment,類似arouter中fragment發現那種。其實這樣做並沒有解決乙個容器的問題,而且頁面切換也不是很靈活,不夠通用,使用起來也不是很方便。
突然有一天我發現github上有個開源專案corepage寫得非常好,完美地解決了我對乙個activity容器的問題,於是我決定仔細研究其**,並在其基礎上設計出了xpage的最初版本。
就在xpage正式投入使用的過程中,我發現還是存在不少問題的: 1.對外api不夠靈活,使用起來不夠方便; 2.每個fragment仍需要手動註冊,很麻煩;
對於api不夠靈活的問題,我在之後的版本中陸續通過構造者模式設計以及android主題屬性等手段解決了。
而對於手動註冊的問題,我正是借鑑了arouter的思路,通過android apt技術,從而實現了fragment資訊的自動註冊。
解決痛點 只需要乙個activity容器就可以實現多個頁面的互動。 fragment自由切換和資料互動。 無需在manifest中註冊一堆activity資訊,通過@page註解一鍵自動註冊。
整合指南
新增gradle依賴
1.在專案根目錄的build.gradle的 repositories 新增jitpack倉庫
allprojects
2.在dependencies新增引用
以下是版本說明,選擇乙個即可。 androidx版本:3.0.0及以上
dependencies support版本:2.3.0及以下
dependencies
-keepattributes signature
# xpage
-keep class com.xuexiang.xpage.annotation.**
基礎使用
頁面跳轉
使用xpage,activity必須要繼承
xpageactivity,fragment必須要繼承
xpagefragment,否則將無法呼叫頁面跳轉的
openpage方法。
頁面的簡單開啟和關閉 使用
openpage即可開啟頁面,入參可為跳轉類的類名,也可以是類的標識(@page標註的name欄位)
// 使用類名開啟
openpage(testfragment.class);
// 使用標識開啟
openpage("testfragment"); 使用
poptoback即可關閉頁面。
poptoback();
// 關閉當前頁並跳轉至某個頁面
poptoback("popbackname", null);
頁面開啟等待結果返回 1.使用
openpageforresult即可,類似activity裡的
startactivityforresult。
openpageforresult(testfragment.class, null, request_code); 2.使用
setfragmentresult來設定頁面關閉的返回值,類似activity裡的
setresult方法。
// 設定返回的資料,類似activity裡的setresult
intent intent = new intent();
intent.putextra(key_back_data, "==【返回的資料】==");
setfragmentresult(500, intent);
// 返回操作
poptoback(); 3.重寫fragment的
onfragmentresult方法來接收返回的資料,類似activity裡的
onactivityresult方法。
@override
public void onfragmentresult(int requestcode, int resultcode, intent data) 靜態設定預設引數 anim coreanim coreanim.slide 頁面轉場動畫 extra int -1 拓展字段
動態設定
使用openpage開啟頁面時,可傳入coreanim列舉設定頁面轉場動畫。
switch(position) 由於為了新開頁面不影響tab主頁當前容器的狀態,需要在開啟新頁面的使用設定使用新容器。
pageoption.to(testfragment.class)
//新建乙個容器,以不影響當前容器
.setnewactivity(true)
.open(this);
複雜activity介面容器的自定義
詳細可參見complexactivity
1.自定義頁面容器的布局,在布局中一定要包含idfragment_container。
android:id="@id/fragment_container"
android:layout_width="match_parent"
android:layout_height="400dp">
2.在xpageactivity中設定頁面容器的布局id
@override
protected int getlayoutid() else {
toastutils.toast("頁面還未載入!");
常見問題
@page註解了,如果沒有的話,即使編譯了也是不會生成
vue頁面跳轉傳參問題傳參
vue 的頁面跳轉以及頁面之間傳參其實是乙個很常見的問題,但是整體上會使用的次數很多,有時候頁面的跳轉不需要引數,因為他屬於那種公共的,大家都可以看到。但是當乙個頁面屬於我們非公共的頁面時,我們就需要我們的資料跟著跳轉過來了,比如說我們的個人資訊或者是個人設定,這些都需要我們去帶著引數去請求,否則服...
vue頁面傳參
sessionstorage localstorage 頁面重新整理,丟失資料問題 路由配置 路由跳轉方式 this.router.push user 123 this.router.push this.router.push 跳轉後的頁面,獲取引數this.route.params.userid ...
vue頁面傳參
1 傳的引數是陣列 傳遞引數的頁面 let setstr encodeuricomponent json.stringify this.tabledata this.router.push send setmessageself?setstr setstr 接收引數頁面 mounted 解釋 首先是...