Android中activity的回調和onActivityResult的使用

onActivityResult這個回調方法在activity中用的非常多,并且一般與startActivityForResult這個方法配合使用蛾娶。
1.startActivityForResult(Intent intent, int requestCode);
第一個參數(shù):一個Intent對象
第二個參數(shù):如果> = 0,當Activity結束時requestCode將歸還在onActivityResult()中。以便確定返回的數(shù)據(jù)是從哪個Activity中返回的疟赊。

2.onActivityResult(int requestCode, int resultCode, Intent data)鞋囊;
第一個參數(shù):這個整數(shù)requestCode提供給onActivityResult,是以便確認返回的數(shù)據(jù)是從哪個Activity返回的钠至,就是在startActivityForResult設置的requestCode葛虐。
第二個參數(shù):這整數(shù)resultCode是由子Activity通過其setResult()方法返回,就是setResult(int resultCode, Intent data)的第一個參數(shù)resultCode棉钧。
一般來說屿脐,resultCode主要指定為RESULT_CANCELED和RESULT_OK ,然后在onActivityResult獲取到resultCode進行判斷宪卿,如果是RESULT_CANCELED就不執(zhí)行回調方法的诵,如果是RESULT_OK 就執(zhí)行回調方法

那么。我們來舉個栗子
有一個activity佑钾,它有諸多按鈕可以跳轉到不同的界面奢驯,就把這個activity先叫做 根activity 吧
在跟activity上點擊button1,可以跳轉到activity1,同樣點擊button2次绘,可以跳轉到activity2瘪阁,同時還都要獲取到activity1或者activity2的返回值顯示出來撒遣,那么我們在button1的點擊事件應該這么寫:

Intent intent = new Intent(RootActivity.this, Activity1.class);
context.startActivityForResult(intent, REQUEST_CODE_ACTIVITY1);

同樣在button2的點擊事件中

Intent intent = new Intent(RootActivity.this, Activity2.class);
context.startActivityForResult(intent, REQUEST_CODE_ACTIVITY2);

REQUEST_CODE_ACTIVITY1和REQUEST_CODE_ACTIVITY2是不相同的兩個int值,標識出兩個不同activity的返回值管跺。

那么在activity1中义黎,如果要設置回調,應該這樣寫

 Intent intent = new Intent(Activity1.this, RootActivity.class);
 intent.putExtra("pass_data", data);
 setResult(RESULT_OK, intent);
 finish();   

如果不想設置回調事件(比如在Activity1中什么都沒操作點擊返回)豁跑,那么就設置為 setResult(RESULT_CANCELED, intent);
接下來就是重寫RootActivity的onActivityResult方法

@Override
   protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
       super.onActivityResult(requestCode, resultCode, intent);
           switch (requestCode) {
               case REQUEST_CODE_ACTIVITY1:
                   if (resultCode == RESULT_OK) {
                               if(intent!=null){
                                       //獲取activity1傳遞的數(shù)據(jù)并顯示出來
                                       dosomething;

                                }
                     }
                    break;
               case REQUEST_CODE_ACTIVITY2:
                   if (resultCode == RESULT_OK) {
                               if(intent!=null){
                                       //獲取activity2傳遞的數(shù)據(jù)并顯示出來
                                       dosomething;
                                }
                     }
                    break; 
           }
   }
   

接下來再說一種情況廉涕,那就是從RootActivity進入Activity1,再進入Activity2,再進入Activity3這種連續(xù)跨好幾個界面的艇拍,要關閉Activity2后直接進入RootActivity狐蜕,如果不需要傳遞數(shù)據(jù),那么在跳轉的時候就可以直接使用startActivity這個方法來跳轉卸夕。在Activity3中只需要寫如下代碼:

Intent intent = new Intent(Activity3.this, RootActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

第二行代碼的意思是在Activity棧中將在RootActivity之上的所有activity出棧层释。

與剛才一樣,如果同樣是跨多個activity快集,并且需要傳遞數(shù)據(jù)的
話贡羔,在跳轉的時候也直接使用startActivity這個方法來跳轉,不過在Activity3中則需要使用如下代碼:

 Intent intent = new Intent(Main3Activity.this, RootActivity.class);
 intent.putExtra("pass_data",data);
 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
 Intent.FLAG_ACTIVITY_SINGLE_TOP);
 setResult(RESULT_OK,intent);
 startActivity(intent);

然后在RootActivity中就不能通過onActivityResult接受數(shù)據(jù)了个初。而應該使用onNewIntent這個方法

@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        //從Main3Activity返回的數(shù)據(jù)
        String data = intent.getStringExtra("pass_data");
        dosomething;
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末乖寒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子院溺,更是在濱河造成了極大的恐慌楣嘁,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件珍逸,死亡現(xiàn)場離奇詭異马澈,居然都是意外死亡,警方通過查閱死者的電腦和手機弄息,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門痊班,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人摹量,你說我怎么就攤上這事涤伐。” “怎么了缨称?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵凝果,是天一觀的道長。 經常有香客問我睦尽,道長器净,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任当凡,我火速辦了婚禮山害,結果婚禮上纠俭,老公的妹妹穿的比我還像新娘。我一直安慰自己浪慌,他們只是感情好冤荆,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著权纤,像睡著了一般钓简。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上汹想,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天外邓,我揣著相機與錄音,去河邊找鬼古掏。 笑死损话,一個胖子當著我的面吹牛,可吹牛的內容都是我干的冗茸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼匹中,長吁一口氣:“原來是場噩夢啊……” “哼夏漱!你這毒婦竟也來了?” 一聲冷哼從身側響起顶捷,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤挂绰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后服赎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體葵蒂,經...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年重虑,在試婚紗的時候發(fā)現(xiàn)自己被綠了践付。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡缺厉,死狀恐怖永高,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情提针,我是刑警寧澤命爬,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站辐脖,受9級特大地震影響饲宛,放射性物質發(fā)生泄漏。R本人自食惡果不足惜嗜价,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一艇抠、第九天 我趴在偏房一處隱蔽的房頂上張望幕庐。 院中可真熱鬧,春花似錦练链、人聲如沸翔脱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽届吁。三九已至,卻和暖如春绿鸣,著一層夾襖步出監(jiān)牢的瞬間疚沐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工潮模, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留亮蛔,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓擎厢,卻偏偏與公主長得像究流,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子动遭,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內容