Quería saber cómo configuramos onClickListener básico en Kotlin para el desarrollo de Android.
Para usar varias identificaciones:
textview1.setOnClickListener(clickListener) textview2.setOnClickListener(clickListener)Crear clase anónima:
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() } } }Primero debe obtener la referencia a la Vista (por ejemplo, Button, TextView, etc.) y establecer un OnClickListener en la referencia usando el método setOnClickListener()
// 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() }Consulte el ejemplo de Kotlin SetOnClickListener para ver un ejemplo completo de Android de Kotlin donde un botón está presente en una actividad y OnclickListener se aplica al botón. Cuando hace clic en el botón, se ejecuta el código dentro del bloque SetOnClickListener.
Actualizar
Ahora puede hacer referencia al botón directamente con su ID al incluir la siguiente declaración de importación en el archivo de Clase. Documentación .
import kotlinx.android.synthetic.main.activity_main.*y luego para el boton
btn_click_me.setOnClickListener { // statements to run when button is clicked }Consulte el Tutorial de Android Studio .
Use este código para agregar onClickListener en Kotlin
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() } }Primero busque el botón, para evitar el lanzamiento desde la View , puede usar <> de la siguiente manera:
val button = findViewById<Button>(R.id.button); Una vez que tenga una instancia del Button , ahora puede adjuntar el detector de clics de la siguiente manera:
button.setOnClickListener { // You code here }Use el código a continuación
val textview = findViewById<TextView>(R.id.textview) textview.setOnClickListener(clickListener) val button = findViewById<Button>(R.id.button) button.setOnClickListener(clickListener)código clickListener .
val clickListener = View.OnClickListener {view -> when (view.getId()) { R.id.textview -> firstFun() R.id.button -> secondFun() } }Usas así onclickListener en kotlin
val fab = findViewById(R.id.fab) as FloatingActionButton fab.setOnClickListener { ... }Supongamos que tiene textView para hacer clic
text_view.text = "Hello Kotlin"; text_view.setOnClickListener { val intent = Intent(this@MainActivity, SecondActivity::class.java) intent.putExtra("key", "Kotlin") startActivity(intent) }Aquí hay un ejemplo de cómo usar onClickListener en Kotlin
button1.setOnClickListener(object : View.OnClickListener{ override fun onClick(v: View?) { //Your code here }})Veo muchas sugerencias aquí, pero a esta colección le falta lo siguiente.
button.setOnClickListener(::onButtonClicked)y en la clase actual tenemos un método como este:
private fun onButtonClicked(view: View) { // do stuff }findViewById<Button>(R.id.signUp)?.setOnClickListener( Toast.makeText(mActivity, "Button Clicked", Toast.LENGTH_LONG).show() )Simplemente puede obtener OnClickListener en kotlin
view1.setOnClickListener{ //body }**i have use kotlin-extension so i can access directly by button id:** btnSignIN.setOnClickListener { if (AppUtils.isNetworkAvailable(activity as BaseActivity)) { if (checkValidation()) { hitApiLogin() } } }Método 1:
txtNext.setOnClickListener { //Code statements }Método 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 -> { //Code statements } else -> { // else condition } } } }La forma más fácil que conozco de lograrlo es a través de Kotlin Android Extensions.
En tu aplicación/build.gradle
apply plugin: 'kotlin-android-extensions'
Si su botón se llama 'btnAdd', entonces en su fragmento o actividad importe lo siguiente:
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() } }Si desea simular la antigua forma anónima en Kotlin, encontré que esto funcionó perfectamente.
btnNewWay!!.setOnClickListener(object:View.OnClickListener { override fun onClick(v: View?) { //Your Code Here! }})Simplemente haga lo siguiente:
button.setOnClickListener{doSomething()}
Agregue clickListener en un botón como este
btUpdate.setOnClickListener(onclickListener)agrega este código en tu actividad
val onclickListener: View.OnClickListener = View.OnClickListener { view -> when (view.id) { R.id.btUpdate -> updateData() } }Hay varias formas diferentes de lograr esto, como lo demuestra la variedad de respuestas a esta pregunta.
Para asignar realmente el oyente a la vista, utiliza los mismos métodos que usaría en Java:
button.setOnClickListener()Sin embargo, Kotlin facilita la asignación de una lambda como oyente:
button.onSetClickListener { // Listener code }Alternativamente, si desea utilizar este oyente para múltiples vistas, considere una expresión lambda (una lambda asignada a una variable/valor como referencia):
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 }Puedes usar setOnClickListener así en Kotlin
button.setOnClickListener(View.OnClickListener { //code })Aquí está la solución. A tu código le gustará esto:
button.setOnClickListener { //your code here }No es necesario agregar nada. como abajo:
val button = findViewById<Button>(R.id.Button) button.setOnClickListener { } 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 }var tv = findViewById(R.id.tv) como TextView
tv.setOnClickListener { val i = Intent(this@MainActivity, SecondActivity::class.java) startActivity(i) finish() }Una forma sencilla sería registrar un detector de clics y crear un detector de clics con una expresión lambda.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // click listener registered myButton.setOnClickListener(clickListener) } E implementar el clickListener :
private val clickListener: View.OnClickListener = View.OnClickListener { _ -> // do something here } Puede reemplazar _ con un nombre si necesita la vista para usarlo. Por ejemplo, debe verificar la identificación del oyente de clics.
private val clickListener: View.OnClickListener = View.OnClickListener { view -> if(view.id == login.id) { // do something here } }Hay cinco formas de usar SetOnClickListener:
Primero:
button.setOnClickListener { // Do some work here }Segundo:
button.setOnClickListener(object : View.OnClickListener { override fun onClick(view: View?) { // Do some work here } })Tercera:
button.setOnClickListener(View.OnClickListener { view -> // Do some work here })Cuatro:
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 } } } }Quinto:
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 } } } }¡Salud!
Agregue el archivo del módulo build.gradle
android { ... buildFeatures { viewBinding true } }Para actividad añadir
private lateinit var binding: ResultProfileBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ResultProfileBinding.inflate(layoutInflater) val view = binding.root setContentView(view) }Agregar al hacer clic
binding.button.setOnClickListener { Log.d("TAG", "Example") }En caso de que alguien más quiera lograr esto mientras usa el enlace. Si la identificación de su vista es button_save, entonces este código se puede escribir, aprovechando la sintaxis de aplicación de kotlin
binding.apply { button_save.setOnClickListener { //dosomething } }Tome nota vinculante es el nombre de la instancia vinculante creada para un archivo xml. El código completo está debajo si está escribiendo el código en fragmentos. La actividad funciona de manera similar
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 } } }Implementación del botón OnClickListener desde la función en Android usando kotlin.
Primera vista de botón Crear desde archivo .xml
`<Button android:id="@+id/btn2" android:layout_width="match_parent" android:layout_height="match_parent" android:text="Button2" android:layout_weight="0.5"/>`// y crea una instancia de botón en Actividad
private var btn1:Button?=nullo
// Para la inicialización tardía puede seguir así,
private lateinit var btn1:Button// en onCreate,
btn1=findViewById(R.id.btn1) as Button btn1?.setOnClickListener { btn1Click() }// implementando el evento OnClick del botón de la función,
private fun btn1Click() { Toast.makeText(this, "button1", Toast.LENGTH_LONG).show() }Lo mejor para lograr un oyente de clics en Kotlin (significa que sin findview by id puede hacer clic o instalar la vista de texto, el botón, el control giratorio, etc.)
Paso: -
Estos son los complementos de Gradle File { id 'com.android.application' id 'kotlin-android' id 'kotlin-android-extensions' }
android { compileSdkVersion 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' }}
Puede usar view.setOnClickListener{ // your task to execute }
La inferencia de tipo Kotlin y la expresión lambda automática manejarán el modelo estándar. Nota: Aquí la vista puede ser cualquier cosa como TextView o botón, etc.
Hay varias formas de hacerlo, preferiría la forma kotlin de hacerlo y minimizar el código repetitivo.
Digamos que tiene un botón definido en su archivo de diseño como este,
<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" /> y desea agregar onClickListener a este botón clickMe Necesitaría a continuación para hacer esto,
Agregue la extensión kotlin a sus complementos existentes en el archivo build.gradle como se muestra a continuación y sincronice
plugins { id 'kotlin-android-extensions' }Agregue el oyente así,
clickMe.setOnClickListener { Toast.makeText(this@MainActivity, "You clicked me!", Toast.LENGTH_SHORT).show() }