• 0

[Java / Android] OnClick event, get the sender ID / tag


Question

First of all, my Java is fairly rusty (just started using again after a 6 year hiatus). I am working on this for Android 2.1

Goal:

I have multiple buttons, they all perform the same task, but with different data pulled from an array. For example, button1, button2, button3. I want to use the same onClick for all of them so they share the same code base. if button1 is clicked, text1 is updated, etc

The problem:

I can't figure out how to determine which of the buttons triggered the onClick event. I have seen references to getTag, and getId, but when I check what those contain while debugging, its always empty.

Is there a way to either get the button name in onClick, or maybe a way to pass it another parameter so I can just tell it to pass the ID when I set up the onClick listener?

Thanks!

8 answers to this question

Recommended Posts

  • 0
  On 28/04/2010 at 03:13, dontocsata said:

I believe that View passed to the onClick is the View which generated the click.

I've poked through the view that was passed, but couldn't find the button name in it, unless it's buried in some odd place?

  On 28/04/2010 at 12:28, El Marto said:

iv only ever written one game for android and it was a while agoo. dont you declare the id for each button in the xml file? may be wrong here

Yes you do, and that is what I am trying to find when onClick is triggered. Like dontocsata mentioned, I would think it would be somewhere in the view that was passed in, but if it is, I can't find it

  • 0

No, the View passed in is the Button, I believe. Try this.

so you have... (it changed the case of the objects/methods, but you get the idea)

Button button = //get via R.id, or whatever
Button button2 = //get via R.id, or whatever

OnClickListener myListener = new OnClickListener(){
	public void onClick(View v){
		if(v==button){
			//do something
		}else if(v==button2){
			//do something different
		}
	}
}

button.setOnClickListener(myListener);
button2.setOnClickListener(myListener);

  • 0

I always use this technique:

firstly give your buttons an id. Then do something like this:

Button btn1 = (Button) findViewById(R.id.button1);
Button btn2 = (Button) findViewById(R.id.button2);

btn1.setOnClickListener(myListener);
btn2.setOnClickListener(myListener);

//myListener:
public void onClick(View v) {

     switch (v.getId()) {
            case R.id.button1:
                     btn1.setText("1 clicked!");
                     break;


            case R.id.button2:
                     btn1.setText("2 clicked!");
                     break;
      }
}

  • 0

That worked! I ended up using the switch that al1uk posted as the basis of it. I now see I was completely misunderstanding what the view object was when it was getting passed through and what the getid was doing.

Thanks again everyone! Extremely helpful :D

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Precisely. I didn't give Reddit permission to sell my posts to any AI vendor from any of my accounts. Since I've been on Reddit since before the current pseudo-AI existed, I don't think anyone did...
    • The character tech looks awful, like something from 10 years ago.
    • lol net-negative? They're worth $29 billion, so they aren't hurting. They're just money hungry and don't care at all about the free videos on their platform. They shouldn't be making money off of those, but they are. Those content creators that are uploading their videos they made aren't making anything, but YouTube is making tons of money off of them, along with being exorbitant. If they want to do what they did before and lock Premium videos in a paywall, then fine. But no one is going to put up with them strong-arming people into paying just to have an ad-free experience while watching super old videos uploaded by John Doe at 360p.
    • Sony unveil Marvel fighting game 'Tōkon: Fighting Souls' for PlayStation 5 and PC by Pulasthi Ariyasinghe Sony held a massive surprise in store for those who made to the end of its State of Play presentation today. Coming in as a collaboration between PlayStation Studios, Arc System Works, and Marvel Games, Tōkon: Fighting Souls is slated to be a tag team fighter featuring everyone's favorite heroes and villains from the Marvel comics universe. Watch the debut trailer above. Developer Arc System Works, which has previously worked on series like Guilty Gear and Blazblue, has revealed that the focus on this project was making sure it was easy to pick up and play by anyone. To put this into perspective, the studio says that while other fighting games require learning each character's moves to play them effectively, Tōkon will only have one way of playing for all available fighters. "From the beginning, we aimed to make MARVEL Tōkon: Fighting Souls a title that could be enjoyed by a wide variety of players," explains Game Director and Lead Battle Designer, Kazuto Sekine. "We have designed the mechanics in such a way that you can perform a variety of actions with either traditional fighting game inputs or simple inputs. With the press of a few buttons, multiple characters can appear on screen to provide backup or attack together – creating a new and exciting team VS battle experience." So far, Captain America, Iron Man, Spider-Man, Doctor Doom, Storm, Ms. Marvel, Star-Lord, and Ghost Rider (Robbie Reyes) have been revealed as playable characters, neatly filling the trailer's four versus four battle. Each character has a Japanese flair to them too, such as Iron Man's unique Gundam style for his armor. As for why the studio went with the 4v4 Tag Team battle solution, the team said that the team-up nature of superheroes was the inspiration for that, making sure that players can fill the screen with all sorts of powers they are familiar with. Tōkon: Fighting Souls is coming to both PlayStation 5 consoles as well as PC sometime in 2026. More announcements with reveals for characters, stages, gameplay modes, and online mechanics will be coming up until launch as well.
    • Nothing surprising there. Anyone expecting privacy on ANY social media platform is delusional at best. Let alone one controlled by the same creep that owns Tesla (a.k.a. facecrook on wheels), which blatantly violates user privacy with Tesla vehicles as reported by Louis Rossman. This action of his is just another prime example of why ANYTHING from him is trust-worthy as the same from Zuckerberg...i.e. not at all.
  • Recent Achievements

    • First Post
      James courage Tabla earned a badge
      First Post
    • Reacting Well
      James courage Tabla earned a badge
      Reacting Well
    • Apprentice
      DarkShrunken went up a rank
      Apprentice
    • Dedicated
      CHUNWEI earned a badge
      Dedicated
    • Collaborator
      DarkShrunken earned a badge
      Collaborator
  • Popular Contributors

    1. 1
      +primortal
      347
    2. 2
      snowy owl
      167
    3. 3
      +FloatingFatMan
      164
    4. 4
      ATLien_0
      161
    5. 5
      Xenon
      127
  • Tell a friend

    Love Neowin? Tell a friend!