iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 3
0
自我挑戰組

Kotlin and Android 30 days系列 第 3

Day 3 Discount

使用 SeekBar 計算折扣

目標項目:

  • SeekBar 事件處理
  • EditText 事件處理

SeekBar 事件處理

SeekBar 拉動改變值時會觸發 onProgressChanged 事件,以下設定 setOnSeekBarChangeListener

在 Kotlin 中,這邊的 object 為匿名類別,表示我要傳入的 OnSeekBarChangeListener,且同時覆寫 onProgressChanged;只是將這一串一起寫到 setOnSeekBarChangeListener 的簽名中。

seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
        override fun onStartTrackingTouch(seekBar: SeekBar?) {}

        override fun onStopTrackingTouch(seekBar: SeekBar?) {}

        override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
            percent = progress
            percentView.text = "打折($progress%)"
            calculateResult()
        }
})

以上也可以寫成

val seekBarChangeListener = object : SeekBar.OnSeekBarChangeListener {
            override fun onStartTrackingTouch(seekBar: SeekBar?) {}

            override fun onStopTrackingTouch(seekBar: SeekBar?) {}

            override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
                percent = progress
                percentView.text = "打折($progress%)"
                calculateResult()
            }
        }
seekBar.setOnSeekBarChangeListener(seekBarChangeListener)

EditText 事件處理

在 EditText 輸入完數字之後,我們希望在按下確定時能夠更新介面,所以在按下按鈕時去偵測動作

editText.setOnEditorActionListener { v, actionId, event ->
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            calculateResult()
        }
        false
    }

這邊的 setOnEditorActionListener 寫法是更簡潔的 Lambda 寫法
也可以寫成

editText.setOnEditorActionListener(object : TextView.OnEditorActionListener {
    override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean {
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            calculateResult()
        }
        return false
    }
})

這邊要注意 onEditorAction 的回傳值,代表是否要保留鍵盤。


上一篇
Day 2 TapCounter
下一篇
Day 4 ImagePicker
系列文
Kotlin and Android 30 days30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言