欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android面向單Activity開發(fā)示例解析

 更新時間:2023年02月27日 14:45:52   作者:似曾相識2022  
這篇文章主要為大家介紹了Android面向單Activity開發(fā)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

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

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

  • 需要創(chuàng)建XML文件,配置導(dǎo)航關(guān)系和跳轉(zhuǎn)參數(shù)等
  • 頁面回退是重新創(chuàng)建,需要配合livedata使用
  • 貌似還會存在卡頓,一些棧內(nèi)跳轉(zhuǎn)處理等問題

而Github上Fragmentation庫已經(jīng)停止維護,所幸的是再lssuse中發(fā)現(xiàn)了一個基于它繼續(xù)維護的SFragmentation,于是正是開啟了面向單Activity的開發(fā)。

提供了可滑動返回的版本

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

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

Fragmentation.builder() 
    //設(shè)置 棧視圖 模式為 (默認(rèn))懸浮球模式  SHAKE: 搖一搖喚出  NONE:隱藏, 僅在Debug環(huán)境生效
    .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,  //重新出現(xiàn)時的動畫
        R.anim.public_translate_center_to_right  //退出動畫
    )
    .install()

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

loadRootFragment(int containerId, SupportFragment toFragment)

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

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

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

showHideFragment(ISupportFragment showFragment);

是不是使用起來很簡單,首頁我們解決了,關(guān)于跳轉(zhuǎn)和返回、參數(shù)的接受和傳遞呢?

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

對于單Activity而言,我們其實也可以注冊一個全局的Fragment監(jiān)聽,這樣就能掌控當(dāng)前的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應(yīng)用。對于手機應(yīng)用來說,一般不會存在局部頁面跳轉(zhuǎn)的情況,但是Pad上是常規(guī)操作。

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

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

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

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

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

總結(jié)

單Activity開發(fā)在手機和平板上使用都一樣,但在平板上注意的地方更多,尤其是平板一個頁面可能是多個頁面組成,其局部還能單獨跳轉(zhuǎn)的功能,其中涉及到參數(shù)回傳和棧的回退問題。使用下來,我還是覺得某些頁面對硬件要求很高的使用單Activity會出現(xiàn)體驗不好的情況,有可能是優(yōu)化不到位。手機應(yīng)用我還是使用多Activity方式,平板應(yīng)用則使用該框架實現(xiàn)單Activity方式。

以上就是Android面向單Activity開發(fā)示例解析的詳細內(nèi)容,更多關(guān)于Android面向單Activity開發(fā)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android  兩個Fragment之間的跳轉(zhuǎn)和數(shù)據(jù)的傳遞實例詳解

    Android 兩個Fragment之間的跳轉(zhuǎn)和數(shù)據(jù)的傳遞實例詳解

    這篇文章主要介紹了Android 兩個Fragment之間的跳轉(zhuǎn)和數(shù)據(jù)的傳遞實例詳解的相關(guān)資料,這里說明實現(xiàn)的思路及實現(xiàn)方法,需要的朋友可以參考下
    2017-07-07
  • Android左滑返回功能的實現(xiàn)示例代碼

    Android左滑返回功能的實現(xiàn)示例代碼

    本篇文章主要介紹了Android左滑返回的實現(xiàn)示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Android利用Flutter實現(xiàn)立體旋轉(zhuǎn)效果

    Android利用Flutter實現(xiàn)立體旋轉(zhuǎn)效果

    本文主要介紹了Flutter繪圖如何使用ImageShader填充圖形,并且利用 Matrix4的三維變換加上動畫實現(xiàn)了立體旋轉(zhuǎn)的動畫效果,感興趣的可以嘗試一下
    2022-06-06
  • Android USB轉(zhuǎn)串口通信開發(fā)實例詳解

    Android USB轉(zhuǎn)串口通信開發(fā)實例詳解

    這篇文章主要介紹了 Android USB轉(zhuǎn)串口通信開發(fā)實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Android夜間模式最佳實踐

    Android夜間模式最佳實踐

    這篇文章主要介紹了Android夜間模式最佳實踐,在Android應(yīng)用普遍支持夜間模式的今天,如何優(yōu)雅地實現(xiàn)夜間模式?感興趣的小伙伴們可以參考一下
    2016-02-02
  • Android狀態(tài)欄白底黑字的示例代碼

    Android狀態(tài)欄白底黑字的示例代碼

    這篇文章主要介紹了Android狀態(tài)欄白底黑字的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Android 使用Path實現(xiàn)涂鴉功能

    Android 使用Path實現(xiàn)涂鴉功能

    到月底了最近比較空閑,今天抽空給大家實現(xiàn)一個涂鴉效果,會分幾步實現(xiàn),這里有一個重要的知識點就是圖層,要理解這個。下面先從簡單的說起,一起看看代碼吧
    2016-12-12
  • Android中自定義ImageView添加文字設(shè)置按下效果詳解

    Android中自定義ImageView添加文字設(shè)置按下效果詳解

    這篇文章主要給大家介紹了關(guān)于Android中自定義ImageView添加文字設(shè)置按下效果的相關(guān)資料,實現(xiàn)后的效果非常利用用戶的體驗,文中給出了詳細的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)下吧。
    2017-08-08
  • Android自定義view之圍棋動畫效果的實現(xiàn)

    Android自定義view之圍棋動畫效果的實現(xiàn)

    這篇文章主要介紹了Android自定義view之圍棋動畫效果的實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Android SharedPreferences的使用分析

    Android SharedPreferences的使用分析

    本篇文章小編為大家介紹,Android SharedPreferences的使用分析。需要的朋友參考下
    2013-04-04

最新評論