Android - 如何在Kotlin中实现setOnClickListener?

Ani*_*wal 74 android listener kotlin

我想知道我们如何在Kotlin for Android Development中设置基本的onClickListener.

Nai*_*lah 86

有五种使用 SetOnClickListener 的方法:

第一的:

button.setOnClickListener {
    // Do some work here
}
Run Code Online (Sandbox Code Playgroud)

第二:

button.setOnClickListener(object : View.OnClickListener {
    override fun onClick(view: View?) {
        // Do some work here
    }

})
Run Code Online (Sandbox Code Playgroud)

第三:

button.setOnClickListener(View.OnClickListener { view ->
    // Do some work here
})
Run Code Online (Sandbox Code Playgroud)

向前:

class MainActivity : AppCompatActivity(), View.OnClickListener{

    lateinit var button : Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        button = findViewById(R.id.button1)
        button.setOnClickListener(this)
    }

    override fun onClick(view: View?) {
        when(view?.id){
            R.id.button1->{
                // do some work here
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

第五:

class MainActivity : AppCompatActivity(){

    lateinit var button : Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        button = findViewById(R.id.button1)
        button.setOnClickListener(listener)
    }

    val listener= View.OnClickListener { view ->
        when (view.getId()) {
            R.id.button1 -> {
                // Do some work here
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

干杯!

  • 感谢您花时间展示不同的方式。我选择了no2:) (2认同)
  • 如果侦听器中有多个参数,则第三种方式将类似于“button.setOnClickListener(View.OnClickListener {firstArg, secondaryArg,thirdArg ->” (2认同)

Vin*_*tti 50

假设您有要单击的textView

text_view.text = "Hello Kotlin";

text_view.setOnClickListener {
    val intent = Intent(this@MainActivity, SecondActivity::class.java)
    intent.putExtra("key", "Kotlin")
    startActivity(intent)
}
Run Code Online (Sandbox Code Playgroud)

  • 哦耶!类型推断会处理所有杂乱的部分。谢谢! (3认同)

Aka*_*tel 35

使用以下代码

val textview = findViewById<TextView>(R.id.textview)
textview.setOnClickListener(clickListener)

val button = findViewById<Button>(R.id.button)
button.setOnClickListener(clickListener)
Run Code Online (Sandbox Code Playgroud)

clickListener代码.

val clickListener = View.OnClickListener {view ->

    when (view.getId()) {
        R.id.textview -> firstFun()
        R.id.button -> secondFun()
    }
}
Run Code Online (Sandbox Code Playgroud)


Alf*_*Moh 21

这是一个关于如何在Kotlin中使用onClickListener的示例

button1.setOnClickListener(object : View.OnClickListener{
            override fun onClick(v: View?) {
                //Your code here
            }})
Run Code Online (Sandbox Code Playgroud)


Ron*_*kar 18

方法1:

txtNext.setOnClickListener {
        val intent = Intent(applicationContext, SecondActivity::class.java)
        startActivity(intent)
    }
Run Code Online (Sandbox Code Playgroud)

方法2:

class FirstActivity : AppCompatActivity(), View.OnClickListener {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_first)
    txtNext.setOnClickListener(this)
}

override fun onClick(v: View) {
    when (v.id) {
        R.id.txtNext -> {
            val intent = Intent(applicationContext, SecondActivity::class.java)
            startActivity(intent)
        }
        else -> {
            // else condition
        }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


Luv*_*nga 10

使用多个ID:

textview1.setOnClickListener(clickListener)
textview2.setOnClickListener(clickListener)
Run Code Online (Sandbox Code Playgroud)

创建匿名类:

 private val clickListener: View.OnClickListener = View.OnClickListener { view ->
    when (view.id) {
        R.id.textview1-> { 
           Toast.makeText(this, "Clicked 1", Toast.LENGTH_SHORT).show()
        }
        R.id.textview2-> { 
           Toast.makeText(this, "Clicked 2", Toast.LENGTH_SHORT).show()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Mal*_*n M 6

首先,您必须获取对View的引用(例如Button,TextView等),并使用setOnClickListener()方法将OnClickListener设置为引用

// get reference to button
val btn_click_me = findViewById(R.id.btn_click_me) as Button
// set on-click listener
btn_click_me.setOnClickListener {
    Toast.makeText(this@MainActivity, "You clicked me.", Toast.LENGTH_SHORT).show()
}
Run Code Online (Sandbox Code Playgroud)

请参阅Kotlin SetOnClickListener示例,以获取完整的Kotlin Android示例,其中活动中存在按钮,并且OnclickListener应用于该按钮。当您单击按钮时,将执行SetOnClickListener块中的代码。

更新资料

现在,您可以通过在类文件中包含以下导入语句,直接使用其ID引用按钮。文件资料

import kotlinx.android.synthetic.main.activity_main.*
Run Code Online (Sandbox Code Playgroud)

然后点击按钮

btn_click_me.setOnClickListener {
    // statements to run when button is clicked
}
Run Code Online (Sandbox Code Playgroud)

请参阅Android Studio教程


小智 5

使用此代码添加onClickListenerKotlin

val button : Button = getView()?.findViewById<Button>(R.id.testButton) as Button
button.setOnClickListener {view ->
         Toast.makeText(context, "Write your message here", Toast.LENGTH_LONG).show()
    }
}
Run Code Online (Sandbox Code Playgroud)


And*_*eek 5

只需在Kotlin中获取OnClickListener

view1.setOnClickListener{

//body 

}
Run Code Online (Sandbox Code Playgroud)


小智 5

var tv = findViewById(R.id.tv) 作为文本视图

    tv.setOnClickListener {
       val i = Intent(this@MainActivity, SecondActivity::class.java)
       startActivity(i)
       finish()
    }
Run Code Online (Sandbox Code Playgroud)


had*_*ilq 5

我在这里看到了很多建议,但是这个集合缺少以下内容。

button.setOnClickListener(::onButtonClicked)
Run Code Online (Sandbox Code Playgroud)

在当前类中,我们有一个这样的方法:

private fun onButtonClicked(view: View) {
     // do stuff
}
Run Code Online (Sandbox Code Playgroud)