亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android面向單Activity開發實例分析

發布時間:2023-02-27 16:29:09 來源:億速云 閱讀:125 作者:iii 欄目:開發技術

這篇“Android面向單Activity開發實例分析”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Android面向單Activity開發實例分析”文章吧。

記得前一兩年很多人都跟風面向單Activity開發,顧名思義,就是整個項目只有一個Activity。一個Activity里面裝著N多個Fragment,再給Fragment加上轉場動畫,效果和多Activity跳轉無異。其實想想還比較酷,以前還需要關注多個Acitivity之間的生命周期,現在只需關注一個,但還是需要對Fragment的生命周期進行關注。

其實早在六七年前GitHub上就有單Activity的開源庫Fragmentation,后來谷歌也出了一個庫Navigation。本來以為官方出品必為經典,當時跟著官方文檔一步一步踩坑,最后還是放棄了該方案。理由大概如下:

  • 需要創建XML文件,配置導航關系和跳轉參數等

  • 頁面回退是重新創建,需要配合livedata使用

  • 貌似還會存在卡頓,一些棧內跳轉處理等問題

而Github上Fragmentation庫已經停止維護,所幸的是再lssuse中發現了一個基于它繼續維護的SFragmentation,于是正是開啟了面向單Activity的開發。

提供了可滑動返回的版本

dependencies {
	//請使用最新版本
	implementation 'com.github.weikaiyun.SFragmentation:fragmentation:latest'
	//滑動返回,可選
	implementation 'com.github.weikaiyun.SFragmentation:fragmentation_swipeback:latest'
}

由于是Fragment之間的跳轉,我們需要將原有的Activity跳轉動畫在框架初始化時設置到該框架中

Fragmentation.builder() 
    //設置 棧視圖 模式為 (默認)懸浮球模式  SHAKE: 搖一搖喚出  NONE:隱藏, 僅在Debug環境生效
    .stackViewMode(Fragmentation.BUBBLE)
    .debug(BuildConfig.DEBUG)
    .animation(
        R.anim.public_translate_right_to_center,  //進入動畫
        R.anim.public_translate_center_to_left,  //隱藏動畫
        R.anim.public_translate_left_to_center,  //重新出現時的動畫
        R.anim.public_translate_center_to_right  //退出動畫
    )
    .install()

因為只有一個Activity,所以需要在這個Activity中裝載根Fragment

loadRootFragment(int containerId, SupportFragment toFragment)

但現在的APP幾乎都是一個頁面多個Tab組成的怎么辦呢?

loadMultipleRootFragment(int containerId, int showPosition, SupportFragment... toFragments);

有了多個Fragment的顯示,我們需要切換Tab實際也很簡單

showHideFragment(ISupportFragment showFragment);

是不是使用起來很簡單,首頁我們解決了,關于跳轉和返回、參數的接受和傳遞呢?

//啟動目標fragment
start(SupportFragment fragment)
//帶返回的啟動方式
startForResult(SupportFragment fragment,int requestCode)
//接收返回參數
override fun onFragmentResult(requestCode: Int, resultCode: Int, data: Bundle?) {
    super.onFragmentResult(requestCode, resultCode, data)
}
//返回到上個頁面,和activity的back()類似
pop()

對于單Activity而言,我們其實也可以注冊一個全局的Fragment監聽,這樣就能掌控當前的Fragmnet

supportFragmentManager.registerFragmentLifecycleCallbacks(
    object : FragmentManager.FragmentLifecycleCallbacks() {
        override fun onFragmentAttached(fm: FragmentManager, f: Fragment, context: Context) {
            super.onFragmentAttached(fm, f, context)
        }
        override fun onFragmentCreated(
            fm: FragmentManager,
            f: Fragment,
            savedInstanceState: Bundle?
        ) {
            super.onFragmentCreated(fm, f, savedInstanceState)
        }
        override fun onFragmentStarted(fm: FragmentManager, f: Fragment) {
            super.onFragmentStarted(fm, f)
        }
        override fun onFragmentResumed(fm: FragmentManager, f: Fragment) {
            super.onFragmentResumed(fm, f)
        }
        override fun onFragmentDestroyed(fm: FragmentManager, f: Fragment) {
            super.onFragmentDestroyed(fm, f)
        }
    },
    true
)

接下來我們看看Pad應用。對于手機應用來說,一般不會存在局部頁面跳轉的情況,但是Pad上是常規操作。

Android面向單Activity開發實例分析

如圖,點擊左邊列表的單個item,右邊需要顯示詳情,這時候再點左邊的其他item,此時的左邊頁面是保持不動的,但右邊的詳情頁需要跳轉對應的頁面。使用過Pad的應該經常見到這種頁面,比如Pad的系統設置等頁面。這時只使用Activty應該是不能實現的,必須配合Fragment,左右分為兩個Fragment。

但問題又出現了,這時候點擊back怎么區分局部返回和整個頁面返回呢?

//整個頁面回退,主要是用于當前裝載了Fragment的頁面回退
_mActivity.pop()
//局部回退,被裝載的Fragment之間回退
pop()

如下圖,這樣的頁面我們又應該怎么裝載呢?

Android面向單Activity開發實例分析

可以分析,頁面最外面是一個Activty,要實現單Activity其內部必裝載了一個根Fragment。接著這個根Fragment中使用ViewPage和tablayout完成主頁框架。當前tab頁要滿足右邊詳情頁的單獨跳轉,還得將右邊頁面作為主頁面,以此裝載子Fragment才能實現。

Android面向單Activity開發實例分析

以上就是關于“Android面向單Activity開發實例分析”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

聂拉木县| 兴和县| 芦溪县| 汾阳市| 赣州市| 万年县| 康平县| 砚山县| 綦江县| 开封县| 莎车县| 五莲县| 康平县| 左贡县| 勃利县| 班玛县| 江山市| 资中县| 同仁县| 吴江市| 齐河县| 霞浦县| 连山| 秀山| 格尔木市| 辽阳县| 临颍县| 天等县| 韩城市| 承德市| 迁西县| 宁蒗| 衡山县| 德钦县| 桐梓县| 新津县| 普陀区| 涿鹿县| 开远市| 昌邑市| 黑河市|