2013-01-09 161 views
3

我已经在我的应用程序中创建了3个按钮,当点击它时,会转到方法giveClue。如何知道被点击的按钮ID是什么 - android

<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" /> 

注:我不希望使用不同的方法为

活动类:

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

我的问题是,我要禁用,这是clicked.I唐按钮不想为每个按钮使用不同的方法。是否有可能确定哪个按钮被点击,所以我可以禁用它。

谢谢。

回答

1

由于您作为onClick的参数获得的view代表被点击的视图,因此您可以拨打setEnabled(false)来禁用该按钮。

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

giveClue方法检查view.getId(),并将其与R.id.imageButton1等。通常以一个开关的情况下:)

0

在XML中,标签的属性来完成

android:tag="" 

你可以AAD标签的所有三个按钮,并与标签就可以相应地处理它们

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

是否有必要将视图投射到按钮? –

+0

不行,不需要.. – Nermeen

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为您使用的每个按钮。这很难保持。

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; 
    ... 
     } 
     } 
0

实现一个方法如下它得到的布局

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; 

       }}}); 
    } 
    } 

的子对象的id在giveClue方法只需要调用上述方法..

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

} 

我认为这可能有效..

相关问题