2013-01-09 165 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); 

} 

我認爲這可能有效..

相關問題