Android-Kotlin에서 setOnClickListener를 달성하는 방법은 무엇입니까?


104

Android 개발을 위해 Kotlin에서 기본 onClickListener를 설정하는 방법을 알고 싶었습니다.


6
이 질문은 어떻게 43 표를 가질 수 있습니까?
Hugo Allexis Cardona

5
Android Studio가 Java를로 변환 button.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View) { /*do work*/} })한 다음 생성 된 코드에 대해 람다로 변환해야한다는 권고를 제공 하기 때문에 인기가있을 수 있습니다 .
Joe Lapp

6
Kotlin은 직관적이지 않습니다. 어떤 생각이 왜 구글에 너무 많은 투자를하지 않습니다
codezombie

2
모두가 약간의 차이를두고 같은 답변을 게시하는 이유는 무엇입니까? 대답은 간단 view.setOnClickListener { ... }합니다. 모든 사람들이 평판을 얻고 싶어하는 것 같습니다.
Aziz

답변:


69

클릭 할 textView가 있다고 가정합니다.

text_view.text = "Hello Kotlin";

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

1
오 예! 유형 추론은 모든 지저분한 부분을 처리합니다. 감사!
Joe Lapp

46

아래 코드 사용

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

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

clickListener 코드.

val clickListener = View.OnClickListener {view ->

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

28

다음은 Kotlin에서 onClickListener를 사용하는 방법에 대한 예입니다.

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

모두 가까이서 보면 "객체"는 분명히 중괄호 안에 있지 않습니다. 시간 낭비
M. Usman Khan

26

SetOnClickListener를 사용하는 방법에는 5 가지가 있습니다.

먼저:

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

건배!


26

방법 1 :

txtNext.setOnClickListener {
        //Code statements
    }

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

15

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

제 경우에는 nullPointerException이 발생합니다. 당신이 나를 도와 줄래
MashukKhan에게

보기 ID를 확인하고 xml 파일이 있는지 확인하십시오.
Luvnish Monga

그들은 XML에 존재
MashukKhan

소스 공유에는 XML이 포함됩니다.
Luvnish Monga

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

Kotlin SetOnClickListener 예제 참조활동에 버튼이 있고 버튼에 OnclickListener가 적용된 전체 Kotlin Android 는 를 하세요. 버튼을 클릭하면 SetOnClickListener 블록 내의 코드가 실행됩니다.

최신 정보

이제 클래스 파일에 다음 import 문을 포함하여 해당 ID로 버튼을 직접 참조 할 수 있습니다. 문서 .

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

그런 다음 버튼

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

Android Studio 튜토리얼을 참조하십시오 .


5

이 코드를 사용 onClickListener하여 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()
    }
}

5

kotlin에서 OnClickListener를 얻을 수 있습니다.

view1.setOnClickListener{

//body 

}

5

여기에 많은 제안이 있지만이 컬렉션에는 다음이 누락되었습니다.

button.setOnClickListener(::onButtonClicked)

현재 클래스에는 다음과 같은 메서드가 있습니다.

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

5

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

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

아주 쉽게이 하나를 사용하십시오 (세트 ID는, 다른 클래스에 리스너 및 탐색 한 클래스 클릭)
CHANDAN 쿠마

Stack Overflow에 오신 것을 환영합니다! 여기에 소스 코드를 던지지 마십시오. 다른 사람들이 좋아하고 찬성 할 수 있도록 친절하게 답하고 좋은 설명을 제공하십시오. 참조 : 좋은 답변을 어떻게 작성합니까?
sɐunıɔ ןɐ qɐp

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

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

3

간단한 방법은 클릭 리스너를 등록하고 람다 표현식으로 클릭 리스너를 만드는 것입니다.

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

2

이 질문에 대한 다양한 답변에서 알 수 있듯이이를 달성하는 방법에는 여러 가지가 있습니다.

실제로 리스너를 뷰에 할당하려면 Java에서와 동일한 방법을 사용합니다.

button.setOnClickListener()

그러나 Kotlin을 사용하면 람다를 리스너로 쉽게 할당 할 수 있습니다.

button.onSetClickListener {
    // Listener code
}

또는 여러 뷰에이 리스너를 사용하려면 람다 식 (참조를 위해 변수 / 값에 할당 된 람다)을 고려하십시오.

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

button.setOnClickListener(buttonClickListener)
another_button.setOnClickListener(buttonClickListener)

2

간단히 다음과 같이하십시오.

button.setOnClickListener{doSomething()}



1

kotlin에서 onclickListener처럼 사용합니다.

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

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

1

여기에 해결책이 있습니다. 코드는 다음과 같습니다.

button.setOnClickListener {
            //your code here
        }

아무것도 추가 할 필요가 없습니다. 아래와 같이 :

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

}

0

먼저 버튼을 찾아서 캐스트를 방지하려면 다음과 같이 View사용할 수 있습니다 <>.

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

의 인스턴스가 Button있으면 이제 다음과 같이 클릭 리스너를 연결할 수 있습니다.

button.setOnClickListener {  
 // You code here
}

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
}

0

내가 아는 가장 쉬운 방법은 Kotlin Android 확장 프로그램을 사용하는 것입니다.

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

0

Kotlin에서 이전 익명 방식을 시뮬레이션하려면 이것이 완벽하게 작동한다는 것을 알았습니다.

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

0

이와 같은 버튼에 clickListener를 추가하십시오.

    btUpdate.setOnClickListener(onclickListener)

이 코드를 활동에 추가하십시오.

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


        }
    }

-1

Kotlin에서 이와 같이 setOnClickListener를 사용할 수 있습니다.

button.setOnClickListener(View.OnClickListener {        
       //code
})
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.