Android-KotlinでsetOnClickListenerを実現する方法


101

Android開発用のKotlinで基本的なonClickListenerを設定する方法を知りたいと思いました。


6
この質問に43票を投票するにはどうすればよいですか?
Hugo Allexis Cardona

5
Android StudioがJavaをJavaに変換button.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View) { /*do work*/} })し、生成されたコードについてラムダに変換する必要があることを通知するため、おそらく人気があります。
ジョーラップ

6
コトリンは直感的ではありません。なぜグーグルがそれにそれほど投資しているのかわからない
コデゾンビ19/07/12

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
そうそう!型推論はすべての厄介なビットを取り除きます。ありがとう!
Joe Lapp、

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

KotlinでonClickListenerを使用する方法の例を次に示します

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

すべてが近くに見える、明らかに「オブジェクト」は中括弧の中にありません。私は時間の一部を無駄にした
M. Usman Khan

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を使用する方法は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
            }
        }
    }
}

5番目:

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

複数の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

最初に、ビューへの参照(たとえば、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ブロック内のコードが実行されます。

更新

これで、Classファイルに次のインポート文を含めることにより、ボタンをその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

ここには多くの提案がありますが、このコレクションには以下がありません。

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を設定し、リスナーをクリックして、1つのクラスを別のクラスに移動します)
CHANDAN KUMAR

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)



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 Extensionsを使用することです。

あなたのapp / 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

このようにボタンにクリックリスナーを追加する

    btUpdate.setOnClickListener(onclickListener)

このコードをアクティビティに追加します

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


        }
    }

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.