在 Kotlin 中使用 setOnClickListener

David Mbochi Njonge 2023年1月30日 2022年6月7日
  1. 在 Kotlin 中建立一個新專案並新增一個按鈕
  2. 在 Kotlin 中使用沒有回撥的 setOnClickListener()
  3. 在 Kotlin 中將 setOnCliclListener() 與回撥一起使用
  4. 在 Kotlin 中將 setOnClickListener() 與 Lambda 表示式一起使用
  5. 在 Kotlin 的 MainActivity 類上使用 View.OnClickListener 介面
在 Kotlin 中使用 setOnClickListener

setOnClickListener() 方法是一個事件監聽器,這意味著它只會在按鈕點選等事件發生時被呼叫。setOnClickListener()View 類的一個方法,可以與任何繼承自它的類一起使用。

在本教程中,我們將使用 Button 來測試實際的方法。Button 類繼承了 TextView 類的方法,該類也繼承了 View 基類的方法。

在 Kotlin 中建立一個新專案並新增一個按鈕

轉到你的開發環境並建立一個帶有空活動的新 android 專案。確保 Kotlin 是此應用程式的選定語言。

要建立一個 Button 元件,請轉到 Layout 資料夾下的 activity_main.xml 檔案並將以下 XML 程式碼貼上到 ConstraintLayout 中。

<Button
            android:text="Click me"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:id="@+id/click_me_btn"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"/>

在 Kotlin 中使用沒有回撥的 setOnClickListener()

轉到 Kotlin 的 MainActivity 類並將以下程式碼貼上到 onCreate() 方法中 setContentView() 方法之後。

  val clickMeBtn: Button = findViewById(R.id.click_me_btn)

        clickMeBtn.setOnClickListener {
            val toast = Toast
                .makeText(applicationContext,
                "You have clicked me",
                Toast.LENGTH_SHORT).show()
        }

findViewById() 方法幫助我們使用該元件唯一的 id 檢索我們在佈局上建立的按鈕。此方法可以檢索從 View 類繼承的任何元件,因為它是一個通用方法。

setOnClickListener() 方法使用回撥作為引數,但我們直接在此方法中新增要執行的操作,而不向其傳遞任何回撥。

這可以通過新增到幕後方法中的 @Nullable 註釋來實現。註釋指示引數可以是可選的或空的。

請注意,當我們使用 setOnClickListener() 方法時,如果按鈕不可點選,它首先將按鈕設定為可點選。

我們使用 Toast 類的 makeText() 靜態方法建立了一個文字,此訊息將在螢幕上顯示一小段時間,然後消失。

執行應用程式

按位於 IDE 工具欄右上角的執行圖示來執行應用程式。下圖顯示了執行按鈕的位置。

執行應用程式

這將執行應用程式、啟動虛擬裝置並將其安裝在虛擬裝置上。如果你按下標有 CLICK ME 的按鈕,螢幕底部將顯示標有 You have clicked me 的訊息,如下所示。

kotlin 歡迎資訊

在 Kotlin 中將 setOnCliclListener() 與回撥一起使用

正如我們在前面的例子中提到的,setOnClickListener() 方法有一個可選引數 View.OnClickListener,它是 onClick() 方法的回撥。

轉到 MainActivity 類並將以下程式碼貼上到 setContentView() 方法下方的 onCreate() 方法中。確保你對前面的示例發表評論。

 val clickMeBtn: Button = findViewById(R.id.click_me_btn)

 clickMeBtn.setOnClickListener(object : View.OnClickListener{
            override fun onClick(view: View?) {
                val toast = Toast
                    .makeText(applicationContext,
                    "You have clicked me",
                    Toast.LENGTH_SHORT).show()
            }
        })

在上面的示例中,我們已將 View.OnClickLictener 回撥傳遞給該方法並覆蓋 onClick() 方法。

onClick() 方法有一個 View 型別的引數,表示單擊的檢視。你可以使用 onClick() 中的檢視來執行任何方法,例如更改背景顏色。

在這個例子中,我們顯示了一個 Toast 訊息,就像我們在前面的例子中所做的一樣。使用與我們執行和測試應用程式相同的步驟,你將獲得相同的結果。

在 Kotlin 中將 setOnClickListener() 與 Lambda 表示式一起使用

這個例子類似於我們上面介紹的例子,但我們將其轉換為 lambda 表示式,而不是覆蓋回撥的 onClick() 方法。

轉到 MainActivity 類並將以下程式碼貼上到 setContentView() 方法之後的 onCreate() 方法中。確保你對前面的示例發表評論。

 val clickMeBtn: Button = findViewById(R.id.click_me_btn)

 clickMeBtn.setOnClickListener(View.OnClickListener { view ->
            Toast.makeText(applicationContext,
                "You have clicked me",
            Toast.LENGTH_SHORT).show()
         })

因為我們可以訪問被點選的 view,所以我們可以執行任何方法,但是在這個例子中我們只顯示一個 Toast 訊息。

使用我們用於執行和測試第一個示例的相同步驟,你將在螢幕上看到一條 Toast 訊息,正如我們在其他示例中看到的那樣。

在 Kotlin 的 MainActivity 類上使用 View.OnClickListener 介面

View.OnClickListener 回撥是一個介面,我們可以在 MainActivity 類上實現這個介面,如下圖。

class MainActivity : AppCompatActivity(), View.OnClickListener {
}

一旦我們實現了介面,我們必須在這個類中實現 onClick() 方法。將以下程式碼複製並貼上到 MainActivity 類中。

    override fun onClick(view: View?){
        when(view?.id){
            R.id.click_me_btn -> {
                Toast.makeText(applicationContext,
                "You have clicked me",
                Toast.LENGTH_SHORT).show()
            }
        }
    }

onClick() 方法為我們提供了對單擊檢視的訪問,但由於我們不是通過 id 檢索元件,因此我們必須使用與 switch 語句相同的 when 語句來識別被點選的元件。

如果 idclick_me_btn 的 id 匹配,則執行箭頭函式內部的功能。在此示例中,我們僅在螢幕上顯示 Toast 訊息。

使用我們用於執行和測試前面示例的相同步驟。此示例顯示與預期相同的結果。

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub