web-dev-qa-db-ja.com

ボタンの複数クリックリスナー

以前のように、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で同じ方法を教えてもらえますか?ありがとう

6
Anand Rajput

まず、OnClickListenerActivityを実装します。

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)

または、理解を深めるために、段階的に進んでください-

  1. OnClickListenerActivityに実装します。

  2. コンパイラは、オーバーライドされたメソッドを実装するように要求します。それらを実装します。

  3. onClickメソッド内に記述したJavaコードをコピーして貼り付けます。これは、kotlin自体によって変換するか、when条件を書き留めることができます。

4
Rahul

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  }
   }
 }
_
7
Sudheesh R

次のコードを試すことができます。

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

これがお役に立てば幸いです。

3
rockstar

はい、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 */}
        }
    }
}
3
Kharda

このコードは私のために働いた:

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あなたのクラスで。

2
Mengheang