2019年2月18日 星期一

【Android】APP內部的「返回APP首頁」

(思考這個題目的目的在於........官方所提供關於Activity的某些控制機制其實邏輯不明確,很難知道照表操課的結果,所以會想要思考如何自己「實作一套機制」。)

雖然已經有Fragment,可以讓開發者用「切換」Fragment來製造「回到首頁」的效果,但這種做法其實極限很多。

問題在於「產品設計」通常不會希望APP設計上的「使用流程」受到嚴格拘束,他們總是會希望「APP的功能可以自由地切換。」


嚴格拘束、嚴格規範過的APP操作流程基本上都是樹狀圖。

假設首頁是Activity,下面的幾個主功能則是Activity1、Activity2、Activity3...

如果Activity1下面還有子功能,則是Activity1_1、Activity1_2、Activity1_3...

在Activity1內新增一個static的布林值,假設命名為「Close」,則Activity1_1、Activity1_2、Activity1_3內(還有未來可能延伸出來「子功能的子功能」)的「首頁」鍵按下後都會把這個Close的內容改為true。

另外在Activity1的onResume內檢查它的值,如果為true就把這個Activity關閉,如果false就繼續執行正常功能。

但記得永遠在onCreate內將Close設為false。因為如果經過onCreate就表示這個Activity是被正常且完整的流程給啟動的,可以視為一個「新的呼叫或使用」。

以此類推,Activiy1_1內也可以有自己的Close,讓 Acitivity1_1_1、Activity1_1_2....可以關閉。


這樣的缺點是「APP的操作路徑必須永遠是樹狀的。不同的樹枝之間不可以隨意橫跨呼叫。」


有辦法克服嗎?.......當然有,但是那必須要用靈魂交換.......開玩笑的。

其實這個方法反而相較簡單,但要使用它,必須要對Activity的生命週期應用非常嚴謹。




但最理想的方式是使用「ActivityLifecycleCallbacks」。

(注意!這個方法跟上述的方法是互相矛盾不可並行的。)

一般來說返回首頁會是個按鈕,則可以將這個按鈕統一用一個View類別來擴稱,不管是哪個類別,假設擴充之後的名稱為「HomeCall」。

HomeCall基本上是個要用在XML Layout檔中的類別,並不需要在個別Activity中使用它,(但要使用也可以,必須斟酌發揮一些巧思,)在建構子中使用傳入的Context去將「ActivityLifecycleCallbacks」實作並呼叫。

(應該已經有人知道我要做什麼了。)

然後一樣設置一個static的布林參數,假設命名為「HomeCall」.......(這地方可以依照實務上的需要做調整,不用布林改用其他數值參數也可以。)

在這個View自身上設置OnClickListener,然後內容設計為「一律將HomeCall設為false」,然後在之前實作的「ActivityLifecycleCallbacks」中的「onActivityResume」設計為「一律將傳入的Activity關閉」.......



【未完】

沒有留言:

張貼留言