Baby_Bonnie
2012-11-02 03:53
采纳率: 96.4%
浏览 15.7k

多个按钮和OnClickListeners监听事件处理

在我的 XML布局文件中有16个按钮(数字,加号,减号等)。
我想知道如何检查哪个按钮被按下?
我的想法是每个按钮都使用onClick()方法。但是这个方法有点不切实际,因为有16个按钮呢。我在网上搜索说可以在布局xml中使用android:onClick="function" 的参数。我不会在程序中运用,请问大家谁知道怎么处理多个按钮和OnClickListeners监听事件呢?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 我是Android开发者 2012-11-02 07:50
    已采纳

    声明:

    private Button startButton = null;
    private Button endButton = null;
    

    初始化:

    startButton = (Button)findViewById(R.id.start);
    endButton = (Button)findViewById(R.id.end);
    startButton.setOnClickListener(new MyListener());
    endButton.setOnClickListener(new MyListener());
    

    实现:

    public class MyListener implements OnClickListener {
    
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(v.getId() == R.id.start) {
                    。。。
                } else if(v.getId() == R.id.end) {
                    。。。
                }
            }
        }
    

    你很多的话 你只要都在MyListener中添加就行了

    点赞 评论
  • nana4ever 2012-11-05 01:37
    import android.view.View.OnClickListener;
    
    public class MyActivity extends Activity implements OnClickListener {
    
      @Override public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         Button buttonA = (Button) findViewById(R.id.buttonA);    
         Button buttonB = (Button) findViewById(R.id.buttonB); 
         buttonA.setOnClickListener(this);
         buttonB.setOnClickListener(this);
      }
    
      public void onClick(View v) {
        if(v==buttonA)
        {
            do something...
        }
        if(v==buttonB)
        {
            do something...
        }
    }
    
    点赞 评论
  • hcg_21 2012-11-05 02:29

    你可以在一个类中处理它们,然后实现OnClickListener事件。或在该Activity中添加:

    import android.view.View.OnClickListener;
    
       public class MyActivity extends Activity implements OnClickListener {
    
          @Override public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.main);
             Button buttonA = (Button) findViewById(R.id.buttonA);    
             buttonA.setOnClickListener(this);
             Button buttonB = (Button) findViewById(R.id.buttonB); 
             buttonB.setOnClickListener(this);
          }
    
       //......
    
       public void onClick(View v) {
    
          switch (v.getId()) {
             case R.id.buttonA: 
              //......
              break;
             case R.id.buttonB:
              // ......
              break;
          }
       }
    
    }
    
    点赞 评论
  • LiDaming_and 2012-11-06 09:23

    您可以使用一个没有定义为匿名内部类的处理程序。但这个类得是一个单独的类。onClick()将会传递视图,你可以在onClick()中选择。

    public class MyActivity implements OnClickListener {
        public void onClick(View v) {
           Button b = (Button)v;
           // do what you want 
        }
    
        ...
    }
    

    然后在你的layout.xml放入每个按钮

    <Button android:id=".."
            android:onClick="onClick"
    
    点赞 评论