Android-如何在 Kotlin 实现 setonclickListener?

我想知道我们是如何在 Kotlin 为 Android 开发设置基本的 onclickListener 的。

224230 次浏览

使用以下代码

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


val button = findViewById<Button>(R.id.button)
button.setOnClickListener(clickListener)

ClickListener code.

val clickListener = View.OnClickListener {view ->


when (view.getId()) {
R.id.textview -> firstFun()
R.id.button -> secondFun()
}
}

你就像 Kotlin 里的 onclickListener

val fab = findViewById(R.id.fab) as FloatingActionButton
fab.setOnClickListener {
...
}

假设您要单击 textView

text_view.text = "Hello Kotlin";


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

下面是一个关于如何在 Kotlin 使用 onclickListener 的示例

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

使用多个 id:

textview1.setOnClickListener(clickListener)
textview2.setOnClickListener(clickListener)

创建匿名类:

 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()
}
}
}

首先,您必须获取对视图的引用(比如 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()
}

参考 Kotlin SetOnClickListener 示例获得完整的 Kotlin Android 示例,其中一个按钮出现在活动中,并将 OnclickListener 应用于该按钮。单击按钮时,将执行 SetOnClickListener 块中的代码。

更新

现在可以通过在 Class file. 文件中包含以下导入语句直接引用按钮及其 id。

import kotlinx.android.synthetic.main.activity_main.*

然后按下按钮

btn_click_me.setOnClickListener {
// statements to run when button is clicked
}

请参阅 Android Studio 教程

使用此代码在 Kotlin 添加 ABc0

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()
}
}

首先找到按钮,为了防止从 View转换,你可以使用 <>如下:

val button = findViewById<Button>(R.id.button);

一旦你有了 Button的一个实例,你现在可以像下面这样附加点击侦听器:

button.setOnClickListener {
// You code here
}

有几种不同的方法来实现这一点,正如对这个问题的各种各样的回答所表明的那样。

为了实际将侦听器分配给视图,需要使用与 Java 中相同的方法:

button.setOnClickListener()

然而,Kotlin 可以很容易地指定一个 lambda 作为监听器:

button.onSetClickListener {
// Listener code
}

或者,如果您想将这个侦听器用于多个视图,可以考虑一个 lambda 表达式(分配给变量/值作为参考的 lambda) :

val buttonClickListener = View.OnClickListener { view ->
// Listener code
}


button.setOnClickListener(buttonClickListener)
another_button.setOnClickListener(buttonClickListener)
val saveButton:Button = findViewById(R.id.button_save)


saveButton.setOnClickListener{
// write code for click event
}


with view object
saveButton.setOnClickListener{
view -> // write code for click event
}

方法一:

txtNext.setOnClickListener {
//Code statements
}

方法二:

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 -> {
//Code statements
}
else -> {
// else condition
}
}
}
}

据我所知,实现这一目标最简单的方法就是通过 Kotlin Android 扩展。

在你的 app/build.gradle 上

apply plugin: 'kotlin-android-extensions'

如果按钮名为“ btnAdd”,那么在片段或活动上导入以下内容:

import kotlinx.android.synthetic.main.fragment_transactions.btnAdd

 override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)


btnAdd.setOnClickListener {
Toast.makeText(context , "Done", 10).show()
}
}

如果你想模仿 Kotlin 的匿名方式,我发现这个方法非常有效。

 btnNewWay!!.setOnClickListener(object:View.OnClickListener {
override fun onClick(v: View?) {
//Your Code Here!
}})

简单地做如下:

button.setOnClickListener{doSomething()}

像这样在按钮上添加 clickListener

    btUpdate.setOnClickListener(onclickListener)

将此代码添加到您的活动中

 val onclickListener: View.OnClickListener = View.OnClickListener { view ->
when (view.id) {
R.id.btUpdate -> updateData()




}
}
**i have use kotlin-extension so i can access directly by button id:**




btnSignIN.setOnClickListener {
if (AppUtils.isNetworkAvailable(activity as BaseActivity)) {
if (checkValidation()) {


hitApiLogin()
}
}
}
findViewById<Button>(R.id.signUp)?.setOnClickListener(
Toast.makeText(mActivity, "Button Clicked", Toast.LENGTH_LONG).show()
)

只需要在 kotlin 中获得 OnClickListener

view1.setOnClickListener{


//body


}

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

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

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

button.setOnClickListener(::onButtonClicked)

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

private fun onButtonClicked(view: View) {
// do stuff
}

一个简单的方法是注册一个 click 侦听器并创建一个带有 lambda 表达式的 click 侦听器。

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)


// click listener registered
myButton.setOnClickListener(clickListener)
}

执行 clickListener:

private val clickListener: View.OnClickListener = View.OnClickListener { _ ->
// do something here
}

如果需要视图使用它,可以用名称替换 _。例如,您需要检查 click 侦听器的 id。

private val clickListener: View.OnClickListener = View.OnClickListener { view ->
if(view.id == login.id) {
// do something here
}
}
    val button = findViewById<Button>(R.id.button)
button.setOnClickListener {
val intent =
Intent(this@MainActivity,ThirdActivity::class.java)
intent.putExtra("key", "Kotlin")
startActivity(intent)
}
   button.setOnClickListener {
//write your code here
}

你可以像这样在 Kotlin 使用 setonclickListener

button.setOnClickListener(View.OnClickListener {
//code
})

这是解决方案,你的代码会像这样:

button.setOnClickListener {
//your code here
}

不需要添加任何东西。如下:

val button = findViewById<Button>(R.id.Button)
button.setOnClickListener {


}

使用 SetOnClickListener 有六种方法:

第一:

button.setOnClickListener {
// Do some work here
}

第二:

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


})

第三:

button.setOnClickListener(View.OnClickListener { view ->
// Do some work here
})

第四:

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
}
}
}
}

第五:

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
}
}
}
}

六年级

button.setOnClickListener { view ->
// Do some work here
}

干杯!

添加 build.gradle 模块文件

android {
...
buildFeatures {
viewBinding true
}
}

为活动添加

private lateinit var binding: ResultProfileBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ResultProfileBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
}

点击添加

binding.button.setOnClickListener { Log.d("TAG", "Example") }

以防其他任何人希望在使用绑定时实现此目的。如果您的视图的 id 是 Button _ save,那么可以利用 kotlin application 语法编写这段代码

binding.apply {
button_save.setOnClickListener {
//dosomething
}
}

注意,绑定是为 xml 文件创建的绑定实例的名称。如果您正在以片段的形式编写代码,完整的代码在下面。活动的工作方式类似

private lateinit var binding: FragmentProfileBinding


override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
binding = FragmentProfileBinding.inflate(inflater, container, false)
 

return binding.root
}


// onActivityCreated is deprecated in fragment
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.apply {
button_save.setOnClickListener {
//dosomething
}
}

在 android 中使用 kotlin 从函数实现按钮 OnClickListener。

从.xml 文件创建按钮视图

             `<Button
android:id="@+id/btn2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Button2"
android:layout_weight="0.5"/>`

//和在 Activity 中创建按钮实例

 private var btn1:Button?=null

或者

//对于后期初始化可以采用以下方式,

private lateinit var btn1:Button

//在 onCreate 中,

 btn1=findViewById(R.id.btn1) as Button


btn1?.setOnClickListener { btn1Click() }

//实现按钮 OnClick 事件,

 private fun btn1Click() {
Toast.makeText(this, "button1", Toast.LENGTH_LONG).show()
}

最适合在 Kotlin 实现点击监听(均值没有 findview 的 id,你可以点击或安装文本视图,按钮,微调器等)

步骤:-

  1. 进入你的构建/级别
  2. 添加以下代码行:-id‘ kotlin-android- 增加’
  3. 然后同步项目。

这是格拉德档案 插件{ Id‘ com.android. application’ 身份是“ Kotlin-android” Id’kotlin-android-恶意程序’ }

机器人{ 30版本 BuildToolsVersion“30.0.3”

defaultConfig {
applicationId "com.safal.myapp"
minSdkVersion 21
targetSdkVersion 30
versionCode 1
versionName "1.0"


testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}


buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}

}

你可以使用 view.setOnClickListener{ // your task to execute }

Kotlin 类型推断和自动 lambda 表达式将处理样板。 注意: 这里的视图可以是任何类似 TextView 或按钮等的东西。

有多种方式可以做到这一点,我更喜欢 kotlin 的方式做到这一点,并尽量减少样板代码。

假设在布局文件中定义了这样一个 Button,

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

并且要将 onClickListener 添加到此按钮 clickMe 你需要在下面做这个,

  1. 向 build.gradle 文件中的现有插件添加 kotlin 扩展,如下所示,然后同步

         plugins {
    id 'kotlin-android-extensions'
    }
    
  2. 像这样添加监听器,

        clickMe.setOnClickListener {
    Toast.makeText(this@MainActivity, "You clicked me!", Toast.LENGTH_SHORT).show()
    }