如何知道被点击的按钮 id 是啥 - android

Posted

技术标签:

【中文标题】如何知道被点击的按钮 id 是啥 - android【英文标题】:How to know what is the button id that was clicked - android如何知道被点击的按钮 id 是什么 - android 【发布时间】:2012-12-23 08:12:11 【问题描述】:

我在我的应用程序中创建了 3 个按钮,点击后会转到 giveClue 方法。

<ImageButton
        android:id="@+id/imageButton1"
        android:layout_
        android:layout_
        android:layout_alignTop="@+id/lifeButtonsLbl"
        android:layout_toLeftOf="@+id/ImageButton2"
        android:src="@drawable/icon"
        android:onClick="giveClue" />

    <ImageButton
        android:id="@+id/ImageButton2"
        android:layout_
        android:layout_
        android:layout_alignTop="@+id/imageButton1"
        android:layout_toLeftOf="@+id/ImageButton3"
        android:src="@drawable/icon" 
        android:onClick="giveClue"/>

    <ImageButton
        android:id="@+id/ImageButton3"
        android:layout_
        android:layout_
        android:layout_alignRight="@+id/frameLayout1"
        android:layout_alignTop="@+id/ImageButton2"
        android:src="@drawable/icon"
        android:onClick="giveClue" />

注意:我不想使用不同的方法

活动课:

public void giveClue(View view) 
        gameAdapter.giveClue(game);
    

我的问题是我想禁用被点击的按钮。我不想为每个按钮使用不同的方法。是否可以确定单击了哪个按钮,以便我可以禁用它。

谢谢。

【问题讨论】:

【参考方案1】:

实现如下一种方法,获取布局子对象的id

public static void ButtonBar(final Activity a) 
    //if linear instantiate LinearLayout, if RelativeLayout instantiate RelaytiveLayout
   final LinearLayout ll = (LinearLayout) a.findViewById(R.id.your_layout_id);
      for (int i = ll.getChildCount() - 1; i >= 0; i--) 

        View v = ll.getChildAt(i);

        v.setOnClickListener(new View.OnClickListener() 

            public void onClick(View v) 

                switch (v.getId()) 
                case R.id.ImageButton1:
                    //disable here
                    break;
                case R.id.ImageButton2:
            //disable here                      
            break;
                    case R.id.ImageButton3:
            //disable here                      
            break;

                );
    
  

在 giveClue 方法中只需调用上述方法..

public void giveClue(View view) 
       ButtonBar(this);
          // gameAdapter.giveClue(game);


我认为这可能有效..

【讨论】:

【参考方案2】:

让你的班级实现 `View.OnClickListener',比如

public class MyActivity extends Activity implements View.OnClickListener 

Button button1, button2, button3;

@Override
public void onCreate(Bundle bundle) 
    super.onCreate();

    ...

    button1 = (Button) findViewById(R.id.button1);
    button2 = (Button) findViewById(R.id.button2);
    button3 = (Button) findViewById(R.id.button3);

    button1.setOnClickListener(this);
    button2.setOnClickListener(this);
    button3.setOnClickListener(this);
    

     @Override
      public void onClick(View v) 
       switch(v.getId()) 
         case R.id.button1:
       // do stuff;
       break;
       case R.id.button2:
       // do stuff;
       break;
   ...
       
      

【讨论】:

【参考方案3】:

来自:Android OnClickListener - identify a button

您将学会做这件事的简单方法是:

public class Mtest extends Activity 
  Button b1;
  Button b2;
  public void onCreate(Bundle savedInstanceState) 
    ...
    b1 = (Button) findViewById(R.id.b1);
    b2 = (Button) findViewById(R.id.b2);
    b1.setOnClickListener(myhandler1);
    b2.setOnClickListener(myhandler2);
    ...
  
  View.OnClickListener myhandler1 = new View.OnClickListener() 
    public void onClick(View v) 
      // it was the 1st button
    
  
  View.OnClickListener myhandler2 = new View.OnClickListener() 
    public void onClick(View v) 
      // it was the 2nd button
    
  

或者,如果您只使用一个 clicklistener,您可以这样做:

View.OnClickListener myOnlyhandler = new View.OnClickListener() 
  public void onClick(View v) 
      if( b1.getId() == ((Button)v).getId() )
          // it was the first button
      
      else if( b2.getId() == ((Button)v).getId() )
          // it was the second button
      
  

不过,我不建议这样做,因为您必须为您使用的每个按钮添加一个if。这很难维护。

【讨论】:

【参考方案4】:

由于您作为onClick 的参数获得的view 代表被点击的视图,您只需调用setEnabled(false) 即可禁用该按钮。

public void giveClue(View view) 
    ((Button)view).setEnabled(false);  // disable button

【讨论】:

【参考方案5】:

像这样..

public void giveClue(View view) 
    if( b1.getId() == view.getId() )
      // it was the first button
    
    else if( b2.getId() == view.getId() )
      // it was the second button
    
  

【讨论】:

是否需要将视图投射到 Button?【参考方案6】:

在XML中有一个Tag的属性

android:tag=""

您可以为所有三个按钮添加标签,并使用该标签相应地处理它们

【讨论】:

【参考方案7】:

giveClue 方法中检查view.getId() 并将其与R.id.imageButton1 等进行比较。通常使用switch-case 完成:)

【讨论】:

以上是关于如何知道被点击的按钮 id 是啥 - android的主要内容,如果未能解决你的问题,请参考以下文章

onClick 获取被点击按钮的ID

Android背景+文本+按钮图标

等待QML界面中两个按钮被点击

在下拉菜单中添加动作按钮,我怎么知道按钮是不是被点击了闪亮

js 点击alert 确定按钮触发的是啥事件

点击按钮打开邮箱的代码是啥