3

I have created 3 buttons in my application which when clicked, will go to the method 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" />

NOTE: I don't want to use different method for the

ACTIVITY CLASS:

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

My problem is that I want to disable the button that was clicked.I don't want to use different method for each button. Is it possible to determine which button was clicked so I can disable it.

Thank you.

newbie
  • 14,582
  • 31
  • 104
  • 146

7 Answers7

3

Check for view.getId() in the giveClue method and compare it to R.id.imageButton1 etc. Normally done with a switch-case :)

gosr
  • 4,593
  • 9
  • 46
  • 82
1

Since the view that you get as an argument to onClick represents the view that was clicked, you can just call setEnabled(false) to disable the button.

public void giveClue(View view) {
    ((Button)view).setEnabled(false);  // disable button
}
Pulkit Goyal
  • 5,604
  • 1
  • 32
  • 50
0

in XML there is a property of Tag

android:tag=""

you can aad tag to all three buttons and with that tags you can handle them accordingly

Usman Kurd
  • 7,212
  • 7
  • 57
  • 86
0

Like that..

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
    }
  }
Nermeen
  • 15,883
  • 5
  • 59
  • 72
0

As from: Android OnClickListener - identify a button

You will learn the way to do it, in an easy way, is:

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

Or, if you are working with just one clicklistener, you can do:

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

Though, I don't recommend doing it that way since you will have to add an if for each button you use. That's hard to maintain.

Community
  • 1
  • 1
N3sh
  • 881
  • 8
  • 37
0

Have your class implement `View.OnClickListener', like

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;
   ...
       }
      }
Gridtestmail
  • 1,459
  • 9
  • 10
0

Implement one method as follows which gets the id's of child objects of layout

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;

                }}});
    }
  }

In giveClue method just call the above method..

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

}

I think this may works..

indraja machani
  • 679
  • 1
  • 9
  • 25