如何知道点击的按钮ID是什么 - android

时间:2013-01-09 09:57:55

标签: android

我在我的应用程序中创建了3个按钮,单击它们将转到方法giveClue。

<ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="24dp"
        android:layout_height="22dp"
        android:layout_alignTop="@+id/lifeButtonsLbl"
        android:layout_toLeftOf="@+id/ImageButton2"
        android:src="@drawable/icon"
        android:onClick="giveClue" />

    <ImageButton
        android:id="@+id/ImageButton2"
        android:layout_width="24dp"
        android:layout_height="22dp"
        android:layout_alignTop="@+id/imageButton1"
        android:layout_toLeftOf="@+id/ImageButton3"
        android:src="@drawable/icon" 
        android:onClick="giveClue"/>

    <ImageButton
        android:id="@+id/ImageButton3"
        android:layout_width="24dp"
        android:layout_height="22dp"
        android:layout_alignRight="@+id/frameLayout1"
        android:layout_alignTop="@+id/ImageButton2"
        android:src="@drawable/icon"
        android:onClick="giveClue" />

注意:我不想为

使用不同的方法

ACTIVITY CLASS:

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

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

谢谢。

7 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

由于您作为[{3}}参数获得的view表示已点击的视图,因此您只需调用setEnabled(false)即可禁用该按钮。

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

答案 2 :(得分:0)

在XML中有一个Tag

的属性
android:tag=""

您可以对所有三个按钮进行标记,并使用该标记相应地处理它们

答案 3 :(得分:0)

喜欢那个..

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

答案 4 :(得分:0)

来自: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。这很难维持。

答案 5 :(得分:0)

让你的类实现`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;
   ...
       }
      }

答案 6 :(得分:0)

实现如下一个方法,获取布局的子对象的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);

}

我认为这可行..