iT邦幫忙

DAY 24
5

Android 學習手札系列 第 24

Day 24 - Android - 溝通

  • 分享至 

  • xImage
  •  

今天就進一步為各位介紹 Activity 如何進一步進行相互溝通

同時,最後留了一個小片段請各位腦力激盪一下哦rock
先復習一下昨天提到要獲得回覆的步驟

一、使用 startActivityForResult 從 Activity1 串連到 Activity2
二、要從 Activity2 要利用 setResult 傳回一個回傳碼甚至是意圖給 Activity1
三、再來就是讓 Activity1 的 onActivityResult 來接收回傳碼並執行我們想要做的動作!

就是這樣三個步驟,讓我們的在串連的過程得以更為流暢,而可能會人問說,這樣跟我們平常按下返回鍵還有自己包裝的過程中有什麼不同?
首先,返回鍵按下去後,並不會去觸發 onActivityResult 這個流程,按下返回鍵時,activity 會很忠實地幫我們走過一切由命運(系統)定好的週期流程!

接下來我們先延續昨日的範例來進行今天的介紹,
第一步驟:設定startActivityForResult
在 MoogleActivity 的 btnClick 偵聽式中,原本的"startActivity(intent);"改成"startActivityForResult(intent, Number.MOOGLE);"

//startActivity(intent);
startActivityForResult(intent, Number.MOOGLE);

第二步驟:在 ChocoboActivity 設定 setResult()
在這裡我們就來動個小手腳,本來我們直接按下實體返回鍵到 MoogleActivity,下拉選單仍是維持在原本的設定項目裡,但是現在我們就將之設定成,當我們按下按鈕的返回鍵時,MoogleActivity的下拉選單會設定成 ChocoboActivity 所選擇的項次。在 btnClick 偵聽式裡的部份程式碼如下

...
//設定傳遞用的包裹
Bundle bundle = new Bundle();
bundle.putInt("signal_id", mSpnChocobo.getSelectedItemPosition());
if(v.getId() == R.id.btn_back){
    Intent intent = new Intent();
    intent.putExtras(bundle);
    //設定返回,給予設定值以及意圖
    setResult(Number.Chocobo, intent);
    finish();
} else if(v.getId() == R.id.btn_show_toast)  ...

有發現這裡有什麼不同嗎?大家先想一想,這邊先完成皆下來的步驟後再來告訴各位~

第三步驟:回到 MoogleActivity 的 onActivityResult 裡增加從 Chocobo 回來的動作!

...
//從回傳碼來決定要對誰做動作
switch(resultCode){
    case Number.Chocobo:
        //拆開包裹提芔從 ChocoboActivity 傳回來的選項
        mSpnSignal.setSelection(data.getIntExtra("signal_id", 0));
	break;
    case Number.MOOGLE3: ...

這樣的動作就完成嘍!

只是這樣的動作下來各位有發現,上面所說的不同處嗎?
在第二步驟時,我們在宣告意圖:Intent時,並沒有告訴他我要從這裡傳到哪裡,也就是我們並沒有為之設定本來都一定要設定的兩個參數。
再來是第三步驟,我們可以根據回傳碼來決定要做什麼動作,也就是說,今天我們這個拆解包裹(bundle)的動作只要在這裡做即可。

而原本自己打包一個包裹來進行回傳後,再來進行判斷,也沒有什麼問題,只是有時候可能會受限於流程順序而要特別思考一下,有時候可能是從某個 Activity 兩手空空地回到 Activity1 時,讓本來都有接受包裹習慣的 Activity1 發生了錯誤,而導致整個 app 發生錯誤!當然這都是假設性的問題,若是您覺得可以自己規劃好這個部份當然也不是什麼問題。更何況,並不是每個 Activity 都進行接收的動作~因此怎麼做會比較好就要請自行因時制宜的選擇嘍!

最後,在將發佈的程式碼裡,為了要增加一些趣味性,在下多做了幾個動作,先看到下面這張圖

這張圖是 Moogle2Activity 的畫面,是當 Chocobo 點擊傳送按鈕時,將選項傳送到 Moogle2 ,而 Moogle2 就依傳送來的選項數量,勾選相對數量的 MoogleXX,接著當點擊介面上的返回按鈕時,返回 ChocoboActivity 的畫面如下

返回到 Chocobo 時,就是把選擇了幾位 Moogle 給呈現出來~

再請各位先想一想這些動作要如何實作,這邊先給幾個 hint:

  1. 返回到 Chocobo 用 Toast 呈現的文字是在 Moogle2 兜好的

  2. 需要宣告一個 ArrayList<CheckBox> mChkBoxs 的全域變數記下這些無中生有的 Checkbox

  3. 要讓這些 checkbox 被勾選的語法是這樣

    mChkBoxs.get(no).setChecked(true);

  4. 亂數產生要被勾選的數字,而且不能重覆!

就請各位腦力激盪一下嘍讚

Day 23 - Android - 不要問我從哪裡來《 》Day 25 - Android - 簡介與列表


上一篇
Day 23 - Android - 不要問我從哪裡來
下一篇
Day 25 - Android - 簡介與列表
系列文
Android 學習手札30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
ted99tw
iT邦高手 1 級 ‧ 2012-10-19 00:15:12

沙發

mosil iT邦新手 4 級 ‧ 2012-10-19 00:35:03 檢舉

ted 大這個沙發坐得還真快XD

都還沒有加完要補上的部份就坐上來了

ted99tw iT邦高手 1 級 ‧ 2012-10-19 00:42:58 檢舉

搶沙發是古今中外做人的基本道理~開心

我要留言

立即登入留言