Activity間數(shù)據(jù)傳遞之從子Activity獲取返回結(jié)果

下面是一個測試用戶地理知識的小demo钾怔,如圖

主QuizActivity

點擊“CHEAT!”即用戶作弊后可以進入子Activity,再點擊“SHOW ANSWER”即可顯示答案蝴蜓,如圖:


子CheatActivity

此時要實現(xiàn)通過CheatActivity把用戶是否偷看答案的情況通知給QuizActivity

  • 需要從子Activity獲取返回信息,可調(diào)用一下Activity方法:
public void startActivityForResult(Intent intent, int requestCode)

在QuizActivity中添加如下代碼

private static final int REQUEST_CODE_CHEAT = 0;

在CHEAT按鍵使用startActivityForResult方法

mCheatButton.setOnClickListener(new View.OnClickListener() {            
      @Override            
      public void onClick(View view) {                
          boolean answerIsTrue = mQuestionsBank[mCurrentIndex].isAnswerTrue();                
          Intent i = CheatActivity.newIntent(QuizActivity.this, answerIsTrue);
          //startActivity(i);                
          startActivityForResult(i, REQUEST_CODE_CHEAT);           
       }        
});

設(shè)置返回結(jié)果

  • 實現(xiàn)子CheatActivity發(fā)送返回信息給父QuizActivity宵距,有以下兩種方法可供調(diào)用:
    public final void setResult(int resultCode)
    public final void setResult(int resultCode, Intent data)
    一般來說伐弹,參數(shù)resultCode是以下兩個預定義常量中的一個
    Activity.RESULT_OK
    Activity.RESULT_CANCELED
    在CheatActivity中調(diào)用setResult方法握侧,即用戶點擊SHOW ANSWER按鈕查看了答案呼畸,則會返回給父QuizActivity結(jié)果代碼Activity.RESULT_OK,若用戶沒有點擊直接后退待讳,則返回Activity.RESULT_CANCELED

返還intent

  • 在CheatActivity中要將數(shù)據(jù)信息回傳給QuizActivity芒澜,則需要創(chuàng)建一個Intent,附加extra信息后耙箍,調(diào)用setResult方法將信息回傳給QuizActivity
private static final String EXTRA_ANSWER_SHOWN = "com.bignerdranch.android.geoquiz.answer_shown";
mShowAnswer.setOnClickListener(new View.OnClickListener() {      
          @Override    
          public void onClick(View view) {       
                 if (mAnswerIsTrue) {            
                     mAnswerTextView.setText(R.string.true_button);        
                 } else {            
                      mAnswerTextView.setText(R.string.false_button);        
                 }        
                 setAnswerShownResult(true); 
         }
});
private void setAnswerShownResult(boolean isAnswerShown) {    
      Intent data = new Intent();    
      data.putExtra(EXTRA_ANSWER_SHOWN, isAnswerShown);    
      setResult(RESULT_OK, data);}
  • 用戶點擊SHOW ANSWER按鈕時撰糠,CheatActivity調(diào)用setResult方法將結(jié)果代碼及intent打包酥馍,然后用戶單機后退鍵回到QuizActivity時辩昆,ActivityManager調(diào)用activity的以下方法:
protected void onActivityResult(int requestCode, int resultCode, Intent data)

該方法參數(shù)來自QuizActivity的原始請求代碼及傳入setResult方法的結(jié)果代碼和intent,最后覆蓋QuizActivity的onActivityResult(int, int, Intent)方法來處理返回結(jié)果旨袒。然而汁针,結(jié)果Intent的內(nèi)容就是CheatActivity中傳給EXTRA_ANSWER_SHOWN的值,因而還要添加一個方法來獲取到此值

public static boolean wasAnswerShown(Intent result) {    
      return result.getBooleanExtra(EXTRA_ANSWER_SHOWN, false);
}

處理返回結(jié)果

  • 在QuizActivity中新增一個成員變量保存CheatActivity回傳的值砚尽,然后覆蓋onActivityResult方法獲取它施无。注意檢查請求代碼和返回代碼是否符合預期,這是最佳代碼實踐必孤,方便將來進行維護
private boolean mIsCheater;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {    
        if (resultCode != Activity.RESULT_OK) {        
            return;    
        }    
        if (requestCode == REQUEST_CODE_CHEAT) {        
            if (data == null) {            
            return;        
        }        
        mIsCheater = CheatActivity.wasAnswerShown(data);    
    }
}

此時猾骡,QuizActivity就成功的拿到了CheatActivity回傳過來的值,完成了在Activity間的傳遞數(shù)據(jù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末敷搪,一起剝皮案震驚了整個濱河市兴想,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赡勘,老刑警劉巖嫂便,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異闸与,居然都是意外死亡毙替,警方通過查閱死者的電腦和手機岸售,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厂画,“玉大人凸丸,你說我怎么就攤上這事∧靖” “怎么了甲雅?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長坑填。 經(jīng)常有香客問我抛人,道長,這世上最難降的妖魔是什么脐瑰? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任妖枚,我火速辦了婚禮,結(jié)果婚禮上苍在,老公的妹妹穿的比我還像新娘绝页。我一直安慰自己,他們只是感情好寂恬,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布续誉。 她就那樣靜靜地躺著,像睡著了一般初肉。 火紅的嫁衣襯著肌膚如雪酷鸦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天牙咏,我揣著相機與錄音臼隔,去河邊找鬼。 笑死妄壶,一個胖子當著我的面吹牛摔握,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丁寄,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼氨淌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伊磺?” 一聲冷哼從身側(cè)響起盛正,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奢浑,沒想到半個月后蛮艰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年壤蚜,在試婚紗的時候發(fā)現(xiàn)自己被綠了即寡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡袜刷,死狀恐怖聪富,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情著蟹,我是刑警寧澤墩蔓,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站萧豆,受9級特大地震影響奸披,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涮雷,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一阵面、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洪鸭,春花似錦样刷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蜓竹,卻和暖如春箕母,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背梅肤。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工司蔬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留邑茄,地道東北人姨蝴。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像肺缕,于是被迫代替她去往敵國和親左医。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容