Android編程實(shí)現(xiàn)兩個(gè)Activity相互切換而不使用onCreate()的方法
本文實(shí)例講述了Android編程實(shí)現(xiàn)兩個(gè)Activity相互切換而不使用onCreate()的方法。分享給大家供大家參考,具體如下:
這里要實(shí)現(xiàn)的目的是:
有3個(gè)Activity: A,B,C,從A中可以進(jìn)入B,B中可以進(jìn)入C,并且B和C之間可能需要多次相互切換,因此不能使用普通的startActivity-finish方式,因?yàn)橹匦聞?chuàng)建Activity比較耗時(shí)。當(dāng)這個(gè)Activity內(nèi)容比較多時(shí),重復(fù)創(chuàng)建很大的影響了流暢性。(即實(shí)現(xiàn)類似于QQ上 選擇照片頁(yè)面-選擇相冊(cè)頁(yè)面,這兩個(gè)頁(yè)面可能多次相互切換,所以不能多次創(chuàng)建)
1.從B進(jìn)入C或者從C進(jìn)入B時(shí),均使用startActivity的方式(不使用finish),并為intent添加參數(shù)FLAG_ACTIVITY_REORDER_TO_FRONT,即:
Intent intent = new Intent(B.this, C.class); intent.addFlags(Intent.FLAG_ACTIVITY__TO_FRONT); startActivity(intent);
在這種情況下,如果C之前沒(méi)有創(chuàng)建則會(huì)被創(chuàng)建,如果已經(jīng)創(chuàng)建了,則只會(huì)把C從Aciticy棧中搬到B的上面來(lái),而不再重新創(chuàng)建。
2.在C中重寫(xiě)onNewIntent方法,即:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
}
該方法中的參數(shù)intent即為從B到C時(shí)startActivity的intent,在第二次進(jìn)入C時(shí),可以在此方法中根據(jù)從B中傳過(guò)來(lái)的數(shù)據(jù)更新C的頁(yè)面。(第一次進(jìn)入C時(shí)走onCreate,不會(huì)走onNewIntent)
3.在B中也重寫(xiě)onNewIntent,和上述2相同。
4.在A和B中使用某個(gè)按鈕或返回鍵回到最開(kāi)始的頁(yè)面A時(shí),同樣使用startActivity的方式,并為intent添加參數(shù)FLAG_ACTIVITY_CLEAR_TOP,這樣B和C都會(huì)被關(guān)閉(finish)
Intent intent = new Intent(this, A.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);
5.同樣,在A中重寫(xiě)onNewIntent方法,處理B或C返回時(shí)傳遞的信息。并且,在Manifest中為A添加屬性
android:launchMode="singleTop"
6.最后一個(gè)問(wèn)題,由于從B到C和從C到B都使用的是startActivity的方式,因此Activity之間切換的動(dòng)畫(huà)都是 開(kāi)啟新Activity 的樣式。例如,無(wú)論從B到C或者從C到B,新頁(yè)面都是從右側(cè)進(jìn)入,給人的感覺(jué)似乎一直在創(chuàng)建新Activity,很不友好。
解決這個(gè)問(wèn)題的方法是自定義Activity之間切換的動(dòng)畫(huà),目的是給用戶一種感覺(jué):從C到B的時(shí)候是新開(kāi)Activity(B從右側(cè)進(jìn)入),而從B到C的時(shí)候是“返回”(C從左側(cè)進(jìn)入)。只需一行代碼:
overridePendingTransition(in, out);
in:進(jìn)入的Activity的動(dòng)畫(huà); out:退出的Activity的動(dòng)畫(huà)。
這里需要注意:
(1)對(duì)于普通的startActivity-finish方式,如果需要自定義Activity之間切換的動(dòng)畫(huà),只需將上述代碼寫(xiě)在startActivity或finish之后即可:
(2)但是,本文中由于使用了FLAG_ACTIVITY_REORDER_TO_FRONT的方式,上述動(dòng)畫(huà)將只在第一次創(chuàng)建頁(yè)面B或C的時(shí)候有效。解決方法是,將上述代碼寫(xiě)在onNewIntent中。例如從B到C,則在C中onNewIntent中寫(xiě)上這行代碼,指定C進(jìn)入的樣式和B退出的樣式。
7.動(dòng)畫(huà)資源:
(1)Activity從左側(cè)退出:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="150" android:fromXDelta="0" android:toXDelta="-100%p" android:fromYDelta="0" android:toYDelta="0" > </translate>
(2)Activity從右側(cè)退出:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="150" android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="100%p" android:toYDelta="0" > </translate>
(3)Activity從左側(cè)進(jìn)入:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="150" android:fromXDelta="-100%p" android:fromYDelta="0" android:toXDelta="0" android:toYDelta="0" > </translate>
(4)Activity從右側(cè)進(jìn)入:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="150" android:fromXDelta="100%p" android:toXDelta="0" android:fromYDelta="0" android:toYDelta="0" > </translate>
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android開(kāi)發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見(jiàn)問(wèn)題解決方法匯總》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Android 使用ViewPager實(shí)現(xiàn)輪播圖效果
這篇文章主要介紹了Android 使用ViewPager實(shí)現(xiàn)輪播圖效果,通過(guò)實(shí)例代碼給大家講解了適配器和各個(gè)方法的作用介紹,需要的朋友可以參考下2017-05-05
android編程獲取和設(shè)置系統(tǒng)鈴聲和音量大小的方法
這篇文章主要介紹了android編程獲取和設(shè)置系統(tǒng)鈴聲和音量大小的方法,實(shí)例分析了Android針對(duì)音頻的相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
Android 實(shí)現(xiàn)錨點(diǎn)定位思路詳解
本篇文章就使用tablayout、scrollview來(lái)實(shí)現(xiàn)android錨點(diǎn)定位的功能。通過(guò)<a href="#head" rel="external nofollow" > 去設(shè)置頁(yè)面內(nèi)錨點(diǎn)定位跳轉(zhuǎn)。具體實(shí)現(xiàn)思路大家跟隨腳本之家小編一起通過(guò)本文看下吧2018-07-07
Android ViewPager循環(huán)播放廣告實(shí)例詳解
這篇文章主要介紹了Android ViewPager循環(huán)播放廣告條實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
自己實(shí)現(xiàn)Android View布局流程
這篇文章主要介紹了自己實(shí)現(xiàn)Android View布局流程,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-03-03
詳解Android提交數(shù)據(jù)到服務(wù)器的兩種方式四種方法
本篇文章主要介紹了Android提交數(shù)據(jù)到服務(wù)器的兩種方式四種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11
Android短信驗(yàn)證碼倒計(jì)時(shí)驗(yàn)證的2種常用方式
各位開(kāi)發(fā)者們?cè)陂_(kāi)發(fā)中經(jīng)常會(huì)遇到獲取短信驗(yàn)證碼,獲取驗(yàn)證碼后需要等待1分鐘倒計(jì)時(shí),這段時(shí)間是不能再次發(fā)送短信請(qǐng)求的。這篇文章總結(jié)了兩種常用的Android​短信驗(yàn)證碼倒計(jì)時(shí)驗(yàn)證方式,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-12-12
Android實(shí)現(xiàn)價(jià)格走勢(shì)自定義曲線圖
本篇文章主要介紹了Android實(shí)現(xiàn)價(jià)格走勢(shì)曲線圖,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04
Android開(kāi)發(fā)之DialogFragment用法實(shí)例總結(jié)
這篇文章主要介紹了Android開(kāi)發(fā)之DialogFragment用法,結(jié)合實(shí)例形式總結(jié)分析了Android使用DialogFragment代替Dialog功能的相關(guān)使用技巧與注意事項(xiàng),需要的朋友可以參考下2017-11-11

