Android - कोटलिन में setOnClickListener कैसे प्राप्त करें?


101

मैं जानना चाहता था कि हम एंड्रॉइड डेवलपमेंट के लिए कोटलिन में बुनियादी onClickListener कैसे सेट करते हैं।


6
इस प्रश्न के 43 वोट कैसे हो सकते हैं?
ह्यूगो अल्लेक्सिस कार्डोना

5
यह शायद लोकप्रिय है क्योंकि एंड्रॉइड स्टूडियो जावा को परिवर्तित button.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View) { /*do work*/} })करता है और फिर उनके उत्पन्न कोड पर एक सलाह देता है कि हमें इसे लंबोदर में बदलना चाहिए।
जो लैप

6
कोटलिन लानत नहीं है। पता नहीं क्यों Google इसमें बहुत निवेश कर रहा है
कोडज़ॉन्ग जुले

2
क्यों हर कोई मामूली अंतर के साथ एक ही उत्तर पोस्ट कर रहा है? जवाब आसान है view.setOnClickListener { ... }। लगता है कि हर कोई प्रतिष्ठा अर्जित करने के लिए बहुत उत्सुक है।
अज़ीज़

जवाबों:


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
अरे हां! टाइप इंफ़ेक्शन सभी गंदे बिट्स की देखभाल करता है धन्यवाद!
जो लैप

45

नीचे दिए गए कोड का उपयोग करें

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

कोटलिन में onClickListener का उपयोग कैसे करें पर एक उदाहरण है

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

सभी पास दिखते हैं, "ऑब्जेक्ट" घुंघराले ब्रैकेट में नहीं है, जाहिर है। मैंने अपना कुछ समय बर्बाद किया
एम। उस्मान खान

25

विधि 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
        }
    }
  }
}

24

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

चीयर्स!


15

कई आईडी का उपयोग करने के लिए:

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

अपने दृश्य आईडी की जांच करें, सुनिश्चित करें कि वे xml फ़ाइल मौजूद हैं।
लवनीश मोंगा

वे xml
MashukKhan

शेयर अपने स्रोत XML शामिल हैं।
लवनीश मोंगा

6

पहले आपको View (संदर्भ बटन, 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()
}

कोटलिन सेटऑनक्लिकस्टिकर उदाहरण को पूर्ण कोटलिन एंड्रॉइड उदाहरण के लिए देखें जहां एक बटन एक गतिविधि में मौजूद है और बटन पर ऑनक्लिक्लिस्टनर लागू है। जब आप बटन पर क्लिक करते हैं, तो SetOnClickListener ब्लॉक के अंदर कोड निष्पादित होता है।

अपडेट करें

अब आप कक्षा फ़ाइल में निम्न आयात विवरण को शामिल करके बटन को सीधे उसकी आईडी से संदर्भित कर सकते हैं। प्रलेखन

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

और फिर बटन के लिए

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

Android स्टूडियो ट्यूटोरियल देखें


5

onClickListenerकोटलिन में जोड़ने के लिए इस कोड का उपयोग करें

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

बस आप कोक्लिन में 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()
    }

कृपया इसे बहुत आसान (सेट आईडी, क्लिक श्रोता का उपयोग करें और एक कक्षा को दूसरी कक्षा में नेविगेट करें)
CHANDAN KUMAR

ढेर अतिप्रवाह में आपका स्वागत है! कृपया अपने स्रोत कोड को यहां न फेंके। अच्छा बनो और अपने उत्तर को एक अच्छा विवरण देने की कोशिश करो, ताकि अन्य इसे पसंद करें और इसे बढ़ाएं। देखें: मैं एक अच्छा उत्तर कैसे लिखूं?
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
}

_यदि आपको इसका उपयोग करने के लिए दृश्य की आवश्यकता है तो आप एक नाम से बदल सकते हैं । उदाहरण के लिए, आपको क्लिक श्रोता की आईडी जांचनी होगी।

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

2

इसे प्राप्त करने के कई अलग-अलग तरीके हैं, जैसा कि इस प्रश्न पर विभिन्न प्रकार के उत्तरों द्वारा दिखाया गया है।

वास्तव में श्रोता को देखने के लिए असाइन करने के लिए, आप उन्हीं विधियों का उपयोग करते हैं जैसा कि आप जावा में करेंगे:

button.setOnClickListener()

हालांकि, कोटलिन ने एक श्रोता के रूप में एक लंबोदा आवंटित करना आसान बना दिया:

button.onSetClickListener {
    // Listener code
}

वैकल्पिक रूप से, यदि आप कई दृश्यों के लिए इस श्रोता का उपयोग करना चाहते हैं, तो एक लैम्ब्डा एक्सप्रेशन पर विचार करें (संदर्भ के लिए एक चर / मान के लिए असाइन किया गया लैम्ब्डा):

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

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



1

आप कोटलिन में उस 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()
)


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

सबसे आसान तरीका जो मुझे पता है कि कोटलिन एंड्रॉइड एक्सटेंशन के माध्यम से प्राप्त करना है।

अपने ऐप / बिल्ड.ग्रेड पर

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

यदि आप कोटलिन में पुराने अनाम तरीके से अनुकरण करना चाहते हैं तो मैंने पाया कि यह पूरी तरह से काम करता है।

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

0

इस तरह बटन पर क्लिकलिस्ट जोड़ें

    btUpdate.setOnClickListener(onclickListener)

इस कोड को अपनी गतिविधि में जोड़ें

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


        }
    }

-1

आप कोटलीन में इस तरह setOnClickListener का उपयोग कर सकते हैं

button.setOnClickListener(View.OnClickListener {        
       //code
})
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.