xpage 傳參 XPage頁面框架使用指南

2021-10-12 15:22:54 字數 3044 閱讀 8101

簡介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 解釋 首先是...