【问题标题】:best implementation of onclick() [duplicate]onclick() 的最佳实现 [重复]
【发布时间】:2015-06-29 13:54:38
【问题描述】:

我几周前才开始在 android 中开发。我正在开发一个简单的应用程序,它有 2 个活动,但一个活动有 15 个按钮。我现在正在使用

button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {/* Some Code */ });

对于我的 onCreate 中的每个按钮。这种方法对我来说似乎太过分了,也许不是最好的方法。

我知道使用 onClick 和实现 onClickListeners 的 5 种不同形式,但我想知道哪种方式才是正确的做法。最佳做法。

谢谢。

【问题讨论】:

  • 这 15 个按钮有什么作用?单个视图中似乎有很多按钮。
  • Onheiron,我有 6 个按钮,每个按钮减去不同的值。例如。我已经罢工,球犯规,出局和得分。所以我为每个减法按钮添加了一个 clickListener。也许我可以有一个 clicklistener,然后比较视图以查看按下了哪个按钮,然后在那里有逻辑?

标签: android


【解决方案1】:

在这种情况下,我可能会将implements View.OnClickListener 添加到活动类中,然后创建一个onClick,如下所示:

@Override
public void onClick(View v){
  switch(v.getId()){
  case R.id.button1:
    // handle button1 click
    break;
  case R.id.button2:
    // handle button3 click
    break;
  case R.id.button3:
    // handle button3 click
    break;
  // etc...
  }
}

只有当所有这些按钮的操作都以某种方式相关时,这才真正有意义,如果它们是相关的,那么它可以显着减少代码重复。你仍然需要为每个人做view.setOnClickListener(this)

或者,如果您愿意,您可以删除 implements View.OnClickListener@Override 并像 Kevin 所说的那样在 XML 中简单地注册您的方法。这将允许您拥有多个这些“分组”点击侦听器。

【讨论】:

    【解决方案2】:

    我认为,当您有这么多按钮时,最好的方法是将 View.OnClickListener 实现到您的活动,然后实现以下:

    1. 每个按钮只有一行:

      button.setOnClickListener(this);

    2. 覆盖 onClick() 方法并检查所选按钮的 id 并对当前所选按钮执行一些操作,例如:

      // onClick is called when a view has been clicked.
      @Override
      // Parameter v stands for the view that was clicked.  
      public void onClick(View v) { 
      
          // getId() returns the id of the clicked view.
          if(v.getId() == R.id.button1){
              //you clicked the first button
          }else if(v.getId() == R.id.button2){
              //you clicked the second button
          } else if ... // and so on for all of your buttons
      }
      

    【讨论】:

      【解决方案3】:

      可以使用xml属性onClick:

      <?xml version="1.0" encoding="utf-8"?>
      <!-- layout elements -->
      <Button android:id="@+id/mybutton"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Click me!"
          android:onClick="myFancyMethod" />
      <!-- even more layout elements -->
      

      More Information

      【讨论】:

        猜你喜欢
        • 2013-04-07
        • 2014-07-02
        • 1970-01-01
        • 2011-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-11
        • 2011-05-24
        相关资源
        最近更新 更多