以前のように、XMLで定義されたボタンに複数のクリックイベントを追加する方法を知りたいのですが、JavaではView.onClickListener
インターフェイスを実装し、残りの作業はonClick
メソッドで行いました。
例:
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.oneButton:
// do your code
break;
case R.id.twoButton:
// do your code
break;
case R.id.threeButton:
// do your code
break;
default:
break;
}
}
新しいKotlinを使用して基本的な電卓アプリを作成していますが、Kotlinにはそのようなプロビジョニングがないようです。代わりに、すべてのボタンに個別にイベントを添付しているため、コードが長すぎて冗長に見えます。
Kotlinで同じ方法を教えてもらえますか?ありがとう
まず、OnClickListener
にActivity
を実装します。
class MainActivity : Activity , OnClickListener
次に、その実装を次のようにオーバーライドします
func onClick(v:View) {
//use when here like
case R.id.youview -> {
// do your work on click of view
}
View
にクリックリスナーを設定することを忘れないでください。
yourView.setOnClickListener(this)
または、理解を深めるために、段階的に進んでください-
OnClickListener
をActivity
に実装します。
コンパイラは、オーバーライドされたメソッドを実装するように要求します。それらを実装します。
onClick
メソッド内に記述したJavaコードをコピーして貼り付けます。これは、kotlin自体によって変換するか、when
条件を書き留めることができます。
kotlin
_(version:1.1.60)
_にある複数のonClickListenerの場合、次のことが役に立ちました。それが他の誰かにも役立つことを願っています。
次のようなアクティビティにOnClickListener
を実装します。
_class YourActivity : AppCompatActivity(), View.OnClickListener
_
ボタンをonCreate()
に設定します:
_val button = findViewById<Button>(R.id.buttonId)
_
onCreate()
のボタンにonclick
を割り当てます。
_button.setOnClickListener { onClick(button) }
_
onClick()
のオーバーライドメソッド:
_ override fun onClick(v: View) {
when (v.id) {
R.id.buttonId -> { //your code }
..
..
..
else -> { //your code }
}
}
_
次のコードを試すことができます。
class Testing:AppCompatActivity(), View.OnClickListener {
private val mButton1:Button
private val mButton2:Button
protected fun onCreate(savedInstanceState:Bundle) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_testing)
mButton1 = findViewById(R.id.btn_click) as Button
mButton2 = findViewById(R.id.btn_click1) as Button
mButton1.setOnClickListener(this)
mButton2.setOnClickListener(this)
}
fun onClick(view:View) {
when (view.getId()) {
R.id.btn_click -> {
Toast.makeText(this, "button 1", Toast.LENGTH_SHORT).show()
}
R.id.btn_click1 -> {
Toast.makeText(this, "button 2", Toast.LENGTH_SHORT).show()
}
else -> {}
}
}
}
これがお役に立てば幸いです。
はい、Kotlinでは次のように実行できます。
view.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
when(v.id) {
R.id.imgBack -> {/* do your code */}
R.id.twoButton -> {/* do your code */}
R.id.threeButton -> {/* do your code */}
else -> {/* do your code */}
}
}
}
このコードは私のために働いた:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
imgBack.setOnClickListener(this)
twoButton.setOnClickListener(this)
threeButton.setOnClickListener(this)
}
override fun onClick(view:View) {
when (view.id) {
R.id.imgBack -> {
Toast.makeText(this, "imgBack", Toast.LENGTH_SHORT).show()
}
R.id.twoButton -> {
Toast.makeText(this, "twoButton", Toast.LENGTH_SHORT).show()
}
else -> {}
}
}
実装を忘れないでくださいView.OnClickListener
あなたのクラスで。