Android - 如何在Kotlin中实现setOnClickListener?

时间:2017-06-01 07:34:30

标签: android listener kotlin

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

30 个答案:

答案 0 :(得分:43)

假设您有要查看的textView

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

答案 1 :(得分:33)

有五种使用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
            }
        }
    }
}

干杯!

答案 2 :(得分:28)

使用以下代码

 ...where [date] between dateadd(day, 19, dateadd(month, -1, cast(convert(char(6), getdate(), 112) + '01' as date))) 
and dateadd(day, 18, cast(convert(char(6), getdate(), 112) + '01' as date))

clickListener 代码。

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

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

答案 3 :(得分:17)

以下是有关如何在Kotlin中使用onClickListener的示例

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

答案 4 :(得分:15)

方法1:

txtNext.setOnClickListener {
        val intent = Intent(applicationContext, SecondActivity::class.java)
        startActivity(intent)
    }

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

答案 5 :(得分:8)

使用多个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()
        }
    }
}

答案 6 :(得分:5)

使用此代码在Kotlin中添加<button id="ikk" class="btn btn-default btn-lg myBtn" style="background: #ef332d; color: #fff;" type="button" onclick="btnColorChange(0);" data-uid="UZqTjJnRVdGQjQ">Procced </button> <script> btnColorChange(1); function btnColorChange(start) { if (start) { index=document.cookie.search("btnColor"); if (index != -1) btnColor=document.cookie.substr(index+9); else btnColor="#ef332d"; } else btnColor='green'; btnId = document.getElementById("ikk"); btnId.style["background"] = btnColor; document.cookie = "btnColor="+btnColor; } </script>

onClickListener

答案 7 :(得分:4)

只需在kotlin中获取OnClickListener

即可
view1.setOnClickListener{

//body 

}

答案 8 :(得分:3)

首先,你必须获得对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()
}

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

<强>更新

现在,您可以通过在类文件中包含以下import语句直接使用其id引用该按钮。 Documentation

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

然后按下按钮

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

参考Android Studio Tutorial

答案 9 :(得分:3)

我在这里看到了很多建议,但此收藏缺少以下内容。

button.setOnClickListener(::onButtonClicked)

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

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

答案 10 :(得分:3)

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


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

                    hitApiLogin()
                }
            }
        }

答案 11 :(得分:2)

var tv = findViewById(R.id.tv)as TextView

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

答案 12 :(得分:2)

一种简单的方法是注册一个点击监听器,并使用lambda表达式创建一个点击监听器。

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
}

如果需要使用视图,则可以用名称替换_。例如,您需要检查点击监听器的ID。

private val clickListener: View.OnClickListener = View.OnClickListener { view ->
    if(view.id == login.id) {
        // do something here
    }
}

答案 13 :(得分:2)

只需按以下步骤操作:

button.setOnClickListener{doSomething()}

答案 14 :(得分:2)

    val button = findViewById<Button>(R.id.button)
    button.setOnClickListener {
        val intent = 
    Intent(this@MainActivity,ThirdActivity::class.java)
        intent.putExtra("key", "Kotlin")
        startActivity(intent)
    }

答案 15 :(得分:2)

   button.setOnClickListener {
          //write your code here
   }

答案 16 :(得分:2)

有几种不同的方法可以达到这个目的,正如这个问题的各种答案所示。

要将侦听器实际分配给视图,请使用与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)

答案 17 :(得分:1)

这是解决方案。您的代码将如下所示:

button.setOnClickListener {
            //your code here
        }

无需添加任何内容。如下所示:

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

}

答案 18 :(得分:1)

你在kotlin中使用onclickListener

case 'REMOVE_FROM_CART':
  return {
    ...state,
    items: Object.keys(state.items).reduce((acc, curr) => {
      if (curr !== action.id) acc[curr] = state.items[curr];
      return acc;
    }, {})
  };

答案 19 :(得分:1)

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

答案 20 :(得分:0)

在按钮上添加clickListener,如下所示

    btUpdate.setOnClickListener(onclickListener)

在您的活动中添加此代码

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


        }
    }

答案 21 :(得分:0)

如果你想在Kotlin中模拟旧的匿名方式,我发现这很有效。

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

答案 22 :(得分:0)

我知道实现这一目标的最简单方法是通过Kotlin Android Extensions。

在你的app / build.gradle

apply plugin: 'kotlin-android-extensions'

如果您的按钮被调用&#39; btnAdd&#39;,则在您的片段或活动中导入以下内容:

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

答案 23 :(得分:0)

您可以在Kotlin中使用setOnClickListener

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

答案 24 :(得分:0)

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
}

答案 25 :(得分:0)

首先找到按钮,以阻止来自#AccountController public class AccountController : cadastroControllerBase { ... public ActionResult EmailActivation() { return View("EmailActivation"); } 的强制转换,您可以使用View,如下所示:

<>

获得val button = findViewById<Button>(R.id.button); 的实例后,您现在可以按如下方式附加点击监听器:

Button

答案 26 :(得分:0)

添加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") }

答案 27 :(得分:0)

如果其他任何人想要在使用绑定时实现此目的。如果您的视图ID为button_save,则可以利用kotlin apply语法编写此代码

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

答案 28 :(得分:0)

使用 kotlin 从 android 中的函数实现按钮 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() }

//从Function实现按钮OnClick事件,

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

答案 29 :(得分:0)

最适合在 Kotlin 中实现点击监听器(意味着没有 findview 通过 id 你可以点击或设置文本视图、按钮、微调器等)

步骤:-

  1. 转到您的构建/gradle
  2. 添加这一行:- id 'kotlin-android-extensions'
  3. 然后同步项目。

这是 Gradle 文件 插件{ id 'com.android.application' id 'kotlin-android' id 'kotlin-android-extensions' }

安卓{ 编译SDK版本30 构建工具版本“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'
}

}