Maximilian Dietel
Maximilian Dietel

Reputation: 1128

Android Studio - Kotlin: Import Button

I know this is probably a quite simple question to answer but I want to import my button from activity_main.xml with the id "button1":

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

In the MainActivity.kt so I can add a setOnClickListener to it. I saw something like this: MainActivity.kt:

val button1 = findViewById(R.id.button1) as Button

That gives me 2 errors: unresolved reference: findViewById; unresolved reference: Button; This is the action I want to add:

button1.setOnClickListener {
            Toast.makeText(applicationContext, "Hello World", Toast.LENGTH_LONG).show()
        }

So I could use the setOnClickListener on "button1" but it wont work. Whats the standard way of importing a button with kotlin so I can use it properly?

Upvotes: 0

Views: 3488

Answers (3)

Varsha Kulkarni
Varsha Kulkarni

Reputation: 1574

In your code, make sure that the Button and findViewById both were referenced from Activity class.

There are different ways for view binding. The recommended one is to use either data binding or view binding feature.

Kotlin synthetics, part of Android Kotlin Extensions Gradle plugin, is Kotlin only method of view binding which doesn't expose nullabilty. That means all the views are declared as platform types. Now beginning from Kotlin 1.4.20, they will not be supported. Check migration to view binding here: https://developer.android.com/topic/libraries/view-binding/migration

findVewbyId is another way for the same purpose, but this comes with some expenses like traversing the view hierarchy to get the view, runtime exceptions, boilerplate code.

Other way is to use library like ButterKnife

Upvotes: 0

Maximilian Dietel
Maximilian Dietel

Reputation: 1128

So apparently, I needed to add

apply plugin: 'kotlin-android-extensions'

to the build.gradle (Module:app). After that I was able to import all views via

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

on the MainActivity.kt so I could use the setOnClickListener to the Id I gave the button in the activity_main.xml

I think the findViewById() is just another way to do this, still good. Thanks

Upvotes: 1

codearn19
codearn19

Reputation: 181

You Could Do This:

 val button1 = findViewById<Button>(R.id.button1)

Upvotes: 0

Related Questions