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中重寫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中也重寫onNewIntent,和上述2相同。
4.在A和B中使用某個(gè)按鈕或返回鍵回到最開始的頁(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中重寫onNewIntent方法,處理B或C返回時(shí)傳遞的信息。并且,在Manifest中為A添加屬性
android:launchMode="singleTop"
6.最后一個(gè)問(wèn)題,由于從B到C和從C到B都使用的是startActivity的方式,因此Activity之間切換的動(dòng)畫都是 開啟新Activity 的樣式。例如,無(wú)論從B到C或者從C到B,新頁(yè)面都是從右側(cè)進(jìn)入,給人的感覺(jué)似乎一直在創(chuàng)建新Activity,很不友好。
解決這個(gè)問(wèn)題的方法是自定義Activity之間切換的動(dòng)畫,目的是給用戶一種感覺(jué):從C到B的時(shí)候是新開Activity(B從右側(cè)進(jìn)入),而從B到C的時(shí)候是“返回”(C從左側(cè)進(jìn)入)。只需一行代碼:
overridePendingTransition(in, out);
in:進(jìn)入的Activity的動(dòng)畫; out:退出的Activity的動(dòng)畫。
這里需要注意:
(1)對(duì)于普通的startActivity-finish方式,如果需要自定義Activity之間切換的動(dòng)畫,只需將上述代碼寫在startActivity或finish之后即可:
(2)但是,本文中由于使用了FLAG_ACTIVITY_REORDER_TO_FRONT的方式,上述動(dòng)畫將只在第一次創(chuàng)建頁(yè)面B或C的時(shí)候有效。解決方法是,將上述代碼寫在onNewIntent中。例如從B到C,則在C中onNewIntent中寫上這行代碼,指定C進(jìn)入的樣式和B退出的樣式。
7.動(dòng)畫資源:
(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開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問(wèn)題解決方法匯總》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Android自定義View實(shí)現(xiàn)微信支付密碼輸入框
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)微信支付密碼輸入框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06Android輕松實(shí)現(xiàn)多語(yǔ)言的方法示例
本篇文章主要介紹了Android輕松實(shí)現(xiàn)多語(yǔ)言的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11Android網(wǎng)絡(luò)編程之獲取網(wǎng)絡(luò)上的Json數(shù)據(jù)實(shí)例
這篇文章主要介紹了Android網(wǎng)絡(luò)編程之獲取網(wǎng)絡(luò)上的Json數(shù)據(jù)實(shí)例,本文用完整的代碼實(shí)例講解了在Android中讀取網(wǎng)絡(luò)中Json數(shù)據(jù)的方法,需要的朋友可以參考下2014-10-10Android ScrollView只能添加一個(gè)子控件問(wèn)題解決方法
這篇文章主要介紹了Android ScrollView只能添加一個(gè)子控件問(wèn)題解決方法,涉及Android界面布局的相關(guān)技巧,需要的朋友可以參考下2016-02-02Flutter開發(fā)之Widget自定義總結(jié)
這篇文章主要給大家介紹了關(guān)于Flutter開發(fā)中Widget自定義的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Flutter具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04淺談Android Studio導(dǎo)出javadoc文檔操作及問(wèn)題的解決
這篇文章主要介紹了淺談Android Studio導(dǎo)出javadoc文檔操作及問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03Android App開發(fā)中自定義View和ViewGroup的實(shí)例教程
這篇文章主要介紹了Android App開發(fā)中自定義View和ViewGroup的實(shí)例教程,分別介紹了進(jìn)度條和圖片上傳并排列的例子,效果很好很強(qiáng)大,需要的朋友可以參考下2016-05-05