【问题标题】:Multiple click listeners on buttons按钮上的多次点击监听器
【发布时间】:2017-08-09 04:06:56
【问题描述】:

我想知道如何在 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 中做同样的事情吗?谢谢

【问题讨论】:

  • 您可以尝试将此代码复制到 Android Studio 中,看看会得到什么。

标签: java android button onclick kotlin


【解决方案1】:

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

OnClickListener 应用于以下活动:

class YourActivity : AppCompatActivity(), View.OnClickListener

将您的按钮设置为onCreate():

val button = findViewById<Button>(R.id.buttonId)

并将onclick 分配给onCreate() 中的按钮:

button.setOnClickListener { onClick(button) }

onClick()的覆盖方法中:

 override fun onClick(v: View) {
    when (v.id) {
        R.id.buttonId -> { //your code  }
        ..
        ..
        ..
        else -> { //your code  }
   }
 }

【讨论】:

    【解决方案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 */}
            }
        }
    }
    

    【讨论】:

    • 我试过了,但是视图对象不能转换成Button。您可以发布声明视图对象的完整代码吗?谢谢
    • 这似乎是最“kotlinish”的,但代码不会编译。 when 语句需要使用 !! 处理可空值。或者 ?。就我而言,我选择抛出异常,因此该行应该是 when(v!!.id) {
    • @SMBiggs 哦,是的,你是对的。只要意识到它。您可以为 v 添加一个空检查器,例如 when(v?.id) {。我已经更新了答案。谢谢!
    【解决方案3】:

    首先在你的Activity 中实现OnClickListener,比如

    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. 在您的Activity 中实现OnClickListener

    2. 编译器会要求您实现被覆盖的方法。实施这些。

    3. 复制粘贴你在onClick方法中写的java代码,可以由kotlin自己转换或者写下when条件。

    【讨论】:

    • 在 java 中我们会做类似的事情 - case R.id.oneButton: case R.id.twoButton: // do your code break; 当我们有两个不同的按钮用于同一个任务时,我们如何在 kotlin 中实现这一点??
    • 哦,我找到了在 kotlin 中做同样事情的方法,case R.id.oneButton, case R.id.twoButton -&gt; 完成了......
    【解决方案4】:

    你可以试试下面的代码:

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

    希望对你有所帮助。

    【讨论】:

    • 在 java 中我声明这样的按钮:Button btn1, btn2;,如何在 kotlin 的单行中声明多个按钮?
    • 不鼓励使用这种语法,因此像 Kotlin 这样的新语言甚至不允许它们
    【解决方案5】:

    这段代码对我有用:

    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

    【讨论】:

      【解决方案6】:

      试试下面这样。

        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

      【讨论】:

      • 关于 Kotlin 的问题,你用 Java 给出了答案。
      猜你喜欢
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-25
      • 2012-01-25
      • 2013-12-24
      相关资源
      最近更新 更多