Bitle Apps
Bitle Apps

Reputation: 148

Detect which button was pressed

Here's my situation: I programmatically give some buttons an onClickListener, however, I can't fully-handle this event, because I'd like to detect which button was pressed to give to that button (when it is pressed) a new value. Here's how I program those buttons:

  final View.OnClickListener soundButtonListener = new View.OnClickListener() {
            public void onClick(View v) {
                playSound(1);

                int x = songPlay * songProgress;

                mplayer.seekTo(x);
            }
        };

        tableLayout = (TableLayout)v
                .findViewById(R.id.tableLayout);

        int number = 1;
        for (int i = 0; i < tableLayout.getChildCount(); i++) {
            TableRow row = (TableRow)tableLayout.getChildAt(i);
            for (int j = 0; j < row.getChildCount(); j++) {
                Button button = (Button) row.getChildAt(j);
                button.setText("" + number);

                button.setOnClickListener(soundButtonListener);
                songProgress = j;
                number++;
            }
        }

As you see, they haven't a click listener for each one, so when I press my button, mplayer always seekto a point, becausae songProgress stops at 64 (I have 64 buttons to handle). What is good is that I have a number for each button (as you see button.setText("" + number);), and I'd like to check what is their number to give to songProgress different values.

Upvotes: 1

Views: 338

Answers (4)

AMAN SINGH
AMAN SINGH

Reputation: 3561

It's very simple to detect your button. Simply you can do like

button.setId(2000 + 0);

for reference you can check it -

  for (int i = 0; i < ch.length; i++) {
     Button button = new Button(this);
     button.setTextColor(context.getResources().getColor(R.color.black));
     button.setPadding(5, 5, 5, 5);
     if (Integer.parseInt(String.valueOf(ch[i])) == 0) {
            button.setText("No");
            button.setId(2000 + 0);
            layout.addView(button, layoutParams);
            button.setOnClickListener(this);
        }
        if (Integer.parseInt(String.valueOf(ch[i])) == 1) {
            button.setText("Less");
            button.setId(2000 + 1);
            layout.addView(button, layoutParams);
            button.setOnClickListener(this);
        }
        if (Integer.parseInt(String.valueOf(ch[i])) == 2) {
            button.setText("Half");
            button.setId(2000 + 2);
            layout.addView(button, layoutParams);
            button.setOnClickListener(this);
        }
}

and in onClick

 @Override
public void onClick(View v) {
    switch (v.getId()) {
        case 2000:
            Log.e(TAG,"button 0 clicked");
            break;
        case 2001:
            Log.e(TAG,"button 1 clicked");
            break;
        case 2002:
            Log.e(TAG,"button 2 clicked");
            break;
        case 2003:
            Log.e(TAG,"button 3 clicked");
            break;
    }
}

Upvotes: 0

Artur Szymański
Artur Szymański

Reputation: 1648

If i correctly understand you can do something like this:

final View.OnClickListener soundButtonOnClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(v instanceof Button) {
            Button button = (Button) v;
            String text = button.getText().toString();

            if(text == "1") {
                //...
            } else if(text == "2") {

            }
            //OR
            switch (text) {
                case "1": {
                    break;
                }
                case "2": {
                    break;
                }
                //...
            }
        }
    }
};

But in my opinion better use tag instead of text:

//set tag for your button
button.setTag(number); 

//use this tag
Integer number = (Integer) v.getTag();
if(number != null) {
    //...
}

Upvotes: 1

Strider
Strider

Reputation: 4490

If u want to know the text of the pressed button, use this:

public void onClick(View v) {
    Button b = (Button)v;
    String buttonText = b.getText().toString();

    //Do your thing with buttonText
}

Upvotes: 0

David Lelle
David Lelle

Reputation: 96

Your onClick has a View v Object which should be the view that triggered the event. So this view should be your button. Now you could get the text of that button with v.getText(). Then parse the text to your number and use it.

Upvotes: 0

Related Questions