按钮上的多个单击侦听器

时间:2017-08-09 04:06:57

标签: java android button onclick kotlin

我想知道如何将多个单击事件添加到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 个答案:

答案 0 :(得分:3)

首先在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上设置clicklistener。

  yourView.setOnClickListener(this)

或者为了更好地理解一步一步 -

  1. OnClickListener

  2. 中实施Activity
  3. 编译器会要求您实现覆盖方法。实施这些。

  4. 复制粘贴您在onClick方法中编写的java代码,该代码可以由kotlin本身转换或写下when条件。

答案 1 :(得分:3)

对于sort_order kotlin中的多个onClickListener,以下内容对我有所帮助。希望它对其他人也有用。

(version:1.1.60)实施为以下活动:

OnClickListener

class YourActivity : AppCompatActivity(), View.OnClickListener 中设置按钮:

onCreate()

并将val button = findViewById<Button>(R.id.buttonId) 分配给onclick中的按钮:

onCreate()

以及button.setOnClickListener { onClick(button) } 的覆盖方法:

onClick()

答案 2 :(得分:2)

是的,在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 :(得分:2)

您可以尝试以下代码:

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

我希望这对你有所帮助。

答案 4 :(得分:2)

此代码对我有用:

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工具。

答案 5 :(得分:-1)

尝试下面这样的。

  public class MainActivity extends Activity implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Button xyz = (Button) findViewById(R.id.xyz);
        xyz.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) { 
    }}

https://androidacademic.blogspot.in/2016/12/multiple-buttons-onclicklistener-android.html

的详细信息