iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 3
0
自我挑戰組

Kotlin Everyday:新手寫程式踩的坑系列 第 3

Day 3 ─用Kotlin做點餐介面 (1) EditText、Activity

試做一個簡單的點餐系統,在第一頁輸入訂購人姓名之後,點選按鈕會跳轉到第二頁的品項選擇,並且會在第二頁Text顯示剛輸入的訂購人姓名,點選完後最後會回到第一頁並顯示品項細節。主要練習的功能有RadioButton、Activity切換及夾帶資料等,將會拆成幾篇來講:

使用:EditText、Activity

▲ EditText
我們使用到一種新的Text、可以讓我們自由輸入文字,EditText繼承自TextView,所以很多用法幾乎和它一致,最常用的就是「inputType」性質,可以限定要輸入哪種類型的文字或資料,例如:

android:inputType=”textPersonName” (人名)
android:inputType=”textPassword” (密碼)
android:inputType=”number” (數字)
android:inputType=”phone” (電話鍵盤)
android:inputType=”datetime” (時間日期)
...

在畫面元件搜尋「editText或plainText」就可以取得

▲ Activity
創建應用時會顯示一個主要的 Activity(屏幕),但app通常不會只有一個畫面,可能會有很多個Activity存在,這時候就需要透過「intent」來進行切換的功能。

Intent:
在相互獨立的元件(如兩個 Activity)之間提供運行時綁定功能的物件。Intent表示某個應用“執行某項操作的意圖”。您可以使用 Intent 來執行多種任務,但在這裡,我們 Intent 將用於啟動另一个 Activity

常用語法

  • startActivity()
    呼叫該方法,並傳遞一個Intent物件,Intent內至少要設定好要啟動的Activity類別名稱,就可以啟動另一個Activity
  • startActivityForResult()
    啟動另一個Activity2前,已經想好該Activity2可能會執行一些事情,並在結束後希望原來的Activity1可以接收其結果,搭配下方 onActivityResult() 使用
  • onActivityResult()
    被啟動的Activity2結束後,它會透過"另一個Intent"來傳遞資料,你可以在onActivityResult()內收到該Intent物件,這個比較複雜,之後會再講解

如何建立點餐系統

  1. 第一頁拉兩個TextView、EditText(設定輸入姓名)及一個按鈕
  2. 做第二頁,java資料夾點右鍵新增一個 Activity
  3. 命名為 Main2Activity 後按 finish(完成),會發現kt和xml檔案都多了。
    這麼做的好處是什麼?會發現 Main2Activity 程式碼直接就寫入 activity_main2 畫面,它將會自動創建對應的布局畫面,並不用分別新增 kotlin class 和 xml,再連接畫面

  1. 當兩個Activity都有了,來練習最基本的切換頁面,對按鈕設定一個監聽事件,Intent基本寫法就是裡面放要切換的頁面,第一個參數是目前頁面、第二個是指定切換的Activity:
    Intent(A.this, B::class.java)--代表在A欲透過Intent開啟B

  2. 將設好的intent放入startActivity裡,點擊按鈕後會實現切換

button.setOnClickListener {
val intent = Intent(this, Main2Activity::class.java)
              //MainActivity.this可簡寫成this
startActivity(intent)
}

如果不只是單純跳頁,還想要夾帶一些資料呢?
如下圖,在第一頁EditText輸入姓名後,按選擇跳到第二頁時,希望在第二頁TextView的文字中顯示剛剛輸入的姓名,這時候就需要夾帶資料。

當有資料要在activity間傳遞,基本類別的可以直接用intent夾帶,在A.Activity使用putExtra方式加入資料,在B.Activity再以getExtra方式取得資料:

  1. "putExtra" in MainActivity
    putExtra放兩個參數,第一個是Key、讓B.Activity可以讀到的key值,第二個參數就是key對應的value值、也就是我們的資料
button.setOnClickListener {
val intent = Intent(this, Main2Activity::class.java)
val name = ed_name.text.toString()   //將ed_name文字轉成String字串
intent.putExtra("nameKey", name)     //putExtra("Key", value)
startActivity(intent)
}
  1. getExtra in Main2Activity
    在onCreate方法下添加getExtra語法,參數就是key值
val name = intent.getStringExtra("nameKey")
tv_name.text = "訂購人姓名:$name"

今天就寫到最基本的頁面切換,參考作法:启动另一个 Activity


上一篇
Day 2 ─用Kotlin做Tap Counter計數器 (2) Menu
下一篇
Day 4 ─用Kotlin做點餐介面 (2) intent、RadioButton
系列文
Kotlin Everyday:新手寫程式踩的坑30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言