• 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

    • I don't get why you care how thin your phone is. Most people slap a giant case on it anyway, so it doesn't mean much in the long run.
    • Yay it finally made it to openSUSE Tumbleweed. Installed on the rest of my PCs/laptops and also working just fine. Was also available before for KDE Neon and Fedora. And I hear Arch also already has it.
    • Yeah basically family safety is tied to your sons acc and your be the manager of it right and can see what they view and can control it. However open edge and you can actually signin to another account while on the windows account you are monitoring and bypass the restrictions. It was different to this on Windows 7 all the stuff was local not in cloud, so didn't matter if you signed out the browser. Chrome can usually still be installed even when blocked, my son used to use other acc in browser and download chrome and then use that freely and install apps and stuff as webapps. None of the tracking stuff would work. I originally ended up blocking downloads via group policy, microsoft store, winget, and loads of other stuff via group policy. But yeah as i said he just got to the point he reset the pc. I stopped that with bios password but he yanked the cmos battery (restores bios and removes password) and reinstalled windows. Other than physically locking the case away and watching him like a hawk its gameover now. It was kinda self inflicted, i did teach my son some cybersecurity stuff and i used to encourage him to try get past my blocking (so he learnt some skills for the future), he can actually lockpick interesting how you bring that up lol (another thing i got him into) I agree with the parenting thing locking stuff down is not the only solution.
  • Recent Achievements

    • Week One Done
      Helen Shafer earned a badge
      Week One Done
    • First Post
      emptyother earned a badge
      First Post
    • Week One Done
      Crunchy6 earned a badge
      Week One Done
    • One Month Later
      KynanSEIT earned a badge
      One Month Later
    • One Month Later
      gowtham07 earned a badge
      One Month Later
  • Popular Contributors

    1. 1
      +primortal
      659
    2. 2
      ATLien_0
      268
    3. 3
      Michael Scrip
      222
    4. 4
      Steven P.
      167
    5. 5
      +FloatingFatMan
      163
  • Tell a friend

    Love Neowin? Tell a friend!