其實(shí)是我做了個(gè)開源項(xiàng)目(^__^),拿出來(lái)給大家鑒賞下竟秫,歡迎大家提意見
項(xiàng)目:https://github.com/xuyt11/androidBackFlow?歡迎關(guān)注和 star 彼棍。
功能:一個(gè)控制 Android 視圖( activity 與 fragment )回退的工具灭忠。
tip :這是一個(gè)回退工具,不是跳轉(zhuǎn)工具
現(xiàn)在的開發(fā)同學(xué)應(yīng)該對(duì)產(chǎn)品的需求有蠻多體會(huì)座硕,就是好好的業(yè)務(wù)流程弛作,在經(jīng)過(guò)多次發(fā)版之后,從樹形變成了網(wǎng)狀坎吻,就算是自己寫的缆蝉,只要時(shí)間隔久了也要仔細(xì)的去閱讀代碼宇葱,才能再次小心翼翼的去修改瘦真。
現(xiàn)在的痛點(diǎn)
業(yè)務(wù)流程的回退功能:
需要提前 finish 或者 finish 幾個(gè)頁(yè)面。
在邏輯判斷的時(shí)候黍瞧,要去設(shè)置狀態(tài)值诸尽,用 setResult 來(lái) finish 多個(gè)頁(yè)面。...
各種各樣的多視圖回退印颤,造成了復(fù)雜的視圖跳轉(zhuǎn)邏輯您机。且這樣造成了在回退過(guò)程中的多個(gè)視圖,都有狀態(tài)的判斷邏輯。
所以际看,如果有一個(gè)工具咸产,能夠在我們需要回退的時(shí)候,就能回退到目標(biāo)視圖仲闽,將會(huì)降低代碼的復(fù)雜及提高我們開發(fā)的速度脑溢。
解決思路
原來(lái)的回退視圖功能,我們主要利用的是 startActivityForResult 赖欣、 onActivityResult 屑彻、 setResult 與 finish(activity)來(lái)進(jìn)行實(shí)現(xiàn)的。
? ? ?所以顶吮,如果我們每一次都是調(diào)用的 startActivityForResult 方法社牲,而不是 startActivity ,那我們不就可以使用 onActivityResult 悴了、 setResult 與 finish(activity)搏恤,來(lái)進(jìn)行鏈?zhǔn)降囊晥D回退了!
如何回退到指定的 activity 或 fragment 呢让禀!
我們可以知道回退的 activity 與 fragment 的 class 類型挑社,所以只要我們可以在 Activity 的 onActivityResult 方法中判斷當(dāng)前 activity 與其中管理的 fragments ,就能夠在指定視圖不再執(zhí)行 finish 方法巡揍,從而讓指定視圖顯示出來(lái)
1痛阻、activity 的判斷:在 Activity 的 onActivityResult 方法中,我們能判斷當(dāng)前 Activity 的 Class 類型腮敌;
2阱当、activity 中 fragment 的判斷:在 Activity 的 onActivityResult 方法中,我們能通過(guò) getSupportFragmentManager().getFragments()方法糜工,獲取到管理的 fragments 弊添,從而判斷 fragment 的的 Class 類型;
3捌木、fragment 中的 fragments 的判斷:這些 fragment 也能通過(guò) getChildFragmentManager().getFragments()方法獲取到油坝。
若在固定順序的業(yè)務(wù)流程中,我想要按照 activity 界面的 position 來(lái)進(jìn)行回退呢刨裆!
在固定順序的業(yè)務(wù)流程中澈圈,每個(gè) activity 都有固定的 position ,所以只要計(jì)算 position 的差值(即 backActivityCount )帆啃,我們可以在 onActivityResult 方法中瞬女,回退數(shù)量為 backActivityCount 個(gè)的 Activity ,就可以了努潘。
更詳細(xì)的介紹可以點(diǎn)擊:
https://www.v2ex.com/t/333969#reply8
https://github.com/xuyt11/androidBackFlow/blob/master/README.md