上一篇介紹基本的頁面切換,今天來設定Activity2的頁面,主要會用到一個EditText(輸入飲料名稱)和兩個提供單選項的RadioButton,最後是一個按鈕可返回MainActivity。
使用:RadioButton、intent夾帶資料、Activity返回
▲ RadioButton
想要做一個單選項按鈕, 可以使用RadioButton元件,外面包覆RadioGroup會達到單選的效果,因為RadioGroup負責控制RadioButton的狀態。
常用語法:getCheckedRadioButtonId()
可以取得被選取RadioButton的ID
如何建立點餐系統
觀察一下第二個頁面要做的東西,一個輸入飲料的EditText、兩個可以選擇甜度冰塊的單選項、一個返回首頁的按鈕。
RadioGroup下面拉四個按鈕,特別注意設定layout_weigh,也就是權重-剩餘比例的分配,全部調為1就會平均分配
畫面做好後,開始想怎麼寫程式碼,步驟為:
(1)輸入飲料名稱--> (2)讀取被選取RadioButton的值--> (3) 將上述資料都放入intent裡面傳送--> (4)跳轉回到MainActivity
如何讀取RadioButton的值:
findViewById
checkedRadioButtonId
val sugar = RadioGroup_sugar.findViewById<RadioButton>
(RadioGroup_sugar.checkedRadioButtonId).text
//RadioGroup裡面的RadioButton
//不知道被選取是哪個button,用checkedRadioButtonID來辨識
val bundle = Bundle()
bundle.putString("drinksKey", ed_drinks.text.toString())
bundle.putString("sugarKey", sugar.toString()) //putString("Key", value)
val intent = Intent()
intent.putExtras(bundle)
將原本單純切換頁面的startActivity替換成 startActivityForResult,參數多了一個requestCode,用以等下返回原Activity時的辨識碼
setResult有兩個參數,第一個是 RESULT_OK (若操作成功)、第二個是Intent,注意此intent不是原本頁面的,是另一個要攜帶結果的。
接著回A.Activity複寫 onActivityResult 才能接收B傳回的值,包括:
(1) 請求代碼
(2) 結果代碼
(3) 攜帶資料的 Intent
參考資料:從應用行為顯示取得結果
附上整段code可能會比較好理解:
title="Main2Activity"
btn_send.setOnClickListener { //點擊事件
if (ed_drinks.length() < 1)
Toast.makeText(this, "請輸入飲料名稱", Toast.LENGTH_SHORT).show()
//設if條件,提醒一定要輸入飲料名稱
//Toast用法之後會介紹
else {
val bundle = Bundle() //設一個放資料的Bundle
bundle.putString("drinksKey", ed_drinks.text.toString()) //轉成String
... //省略如何取得RadioButton資料,上面有分段解釋了
...
val intent = Intent()
intent.putExtras(bundle)
setResult(Activity.RESULT_OK, intent)
finish()
}
}
最後回到原本的Activity,覆寫onActivityResult接收資料,三個代數:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
data?.extras?.let {
if (requestCode == 1 && resultCode == Activity.RESULT_OK)
tv_others.text =
"飲料:${it.getString("drinks")}\n\n甜度:${it.getString("sugar")}\n\n冰塊:${it.getString("ice")}"
}
}